我有一个由许多与数据库交互的可执行文件组成的大型 Windows 遗留应用程序。可执行文件有 4 个主要用途:
(a) 解析和加载数据库上的文件
(b) 转换文件(例如对文件进行编码)。这也可以将文件分成许多部分。
(c) 在数据库中执行某种复杂的更新
(d) 制作档案
这些可执行文件由批处理文件调用,根据它们的作用可以分为三种类型:
(1) 等待某个条件,从某个外部路径获取文件,可能用 (b) 对其进行转换,执行 (c),发送有关活动结果的通知,将记录写入数据库
(2)等待一个条件,做一些(c),产生一个文件,用(b)转换它,然后将它复制到一个或多个目的地(本地文件,数据库,ftp),发送有关活动结果的通知,将记录写入数据库。
(3)协调(abcd)可执行文件的其他复杂序列,发送有关活动结果的通知,将记录写入数据库
批处理文件是 Windows 机器上的普通 BAT 文件(可能相互调用)。这些文件由调度程序启动。
问题是:
- 在每个批处理文件中,大部分关于环境的信息(公共目录等)都是重复的,大多数类型 (1) 或 (2) 的文件也非常相似。
- 批处理文件不容易为测试环境配置,也不容易自动测试
-通知和等待开始条件的代码部分重复es(如果错误A调用b,如果错误b调用c,如果错误d调用e)。
-goto的使用
-您无法准确跟踪哪些批处理文件已过时以及哪些批处理文件经常被调用
- 要了解发送或接收的文件,您需要单独打开每个批次。
- 它们对应用程序施加设计约束,无法抽象出通用代码
-要实现水平功能(例如,具有默认日志记录策略,计算每个作业被调用的次数)需要在许多文件上编写(不可维护?)代码。
从积极的一面:
批处理文件很容易修改,因此如果批处理由于某种原因失败,编写批处理将情况恢复到安全状态并不困难。
他们经过实战考验。他们已经生产了很长时间
我想出了这个解决方案:
编写一些 Java 库,我在其中提供常用功能和配置(通知人们事件的功能、传输文件的功能、等待条件的功能。
编写一个可以加载和执行任务类的Java“脚本引擎框架”命令行应用程序。(任务类可以使用上述库中提供的功能。)
用户可以根据需要在单独的jar中在类中提供脚本。
脚本可以通过注释自动记录
脚本引擎可以要求脚本输出对自身及其参数的描述
将文件的制作与复制分开
我决定支持 Java,而不是脚本语言(PHP、Python),这样我就可以从编译中受益,而不必担心在公共库中编写可能触发“致命错误”的东西,并且停止执行脚本。
我觉得这将简化大多数标准批处理文件(类型 1 和 2)的执行,另一方面,我担心表示类型 3 的批处理会很困难。我还将实施自动部署和我担心的是,虽然编写错误的批处理文件会产生问题,但在引擎本身(即使由于编译和测试而不太可能发生)或配置中部署一些错误代码可能会产生影响所有脚本的更大问题。
请注意,系统应该是 100% 可靠的,并且系统任务的执行存在截止日期和“时间窗口”。
我的问题是:
您认为批处理文件可以吗?它们在这种情况下被广泛使用吗?
你认为我的方向正确吗?有什么我没有考虑到的吗?<
有没有人有更好的主意?
你知道任何可以帮助我的框架吗?
您认为是否值得开发这个系统以在未来具有更大的灵活性,或者我最好保留批次?
请注意,任何要开发的新解决方案最初都将与现有系统集成,因此我不能例如重写所有内容以在应用程序服务器中工作。