java - 如何存储、编程和执行内部作业?
问题描述
我正在寻找一种方法来存储应用程序将根据指定的系统范围条件执行的系统进程/任务。重点是系统应该检查输入变量,并根据流程的规则触发系统中的特定动作。
我可能正在寻找某种形式的元语言,我可以编写规则/动作,并且可以根据输入系统参数对其进行编程以启动和停止。
- 以什么格式记录这些过程?
- 如何解析这些工作?
- 哪些设计模式适用于此?
- 这个用例是否有任何现有的解决方案?
- 为此使用哪些 Java 库。
如果有什么不清楚的地方,我很乐意完成这个问题。谢谢你。
解决方案
你可以试试 Spring Batch。它为作业引入了自己的领域语言,并允许使用 XML 或 java 对其进行配置。
以下是他们的参考指南中的几个示例。
XML配置:
<job id="footballJob">
<step id="playerload" next="gameLoad"/>
<step id="gameLoad" next="playerSummarization"/>
<step id="playerSummarization"/>
</job>
Java配置:
@Bean
public Job footballJob() {
return this.jobBuilderFactory.get("footballJob")
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.end()
.build();
}
Spring Batch 提供了重复或重试失败的作业步骤以及并行步骤执行的功能。
对于某些任务,也可以使用 Apache Camel。它虽然提供了自己的 DSL 以及 XML 和 Java 配置选项。
这两个框架都提供了描述动作序列的抽象,这应该在工作期间完成。Apache Camel 对于需要一些集成任务(在 JMS 队列中发送消息、调用 REST 或 Web 服务、发送电子邮件等)的作业更方便。Spring Batch 的优点是能够在出现错误或服务暂时无法访问的情况下配置应用程序行为,这应该被调用(重复/重试机制)。这两个框架可以相互集成:您可以从 Apache Camel 路由调用 Spring Batch 作业或从 Spring Batch 作业启动 Apache Camel 路由。
最复杂的解决方案是使用一些 BPMN 引擎(例如 Camunda、Apache Activiti、jBPMN),但这可能是一种矫枉过正。
推荐阅读
- c++ - 如何存储多个原子变量?
- c - 验证 C 中的字符输入
- google-play-games - Google Play 排行榜集成
- opencv - rows, cols, _ = frame.shape AttributeError: 'tuple' object has no attribute 'shape'
- java - Hopcroft 最小化问题
- javascript - JavaScript SubtleCrypto 生成 176 位 AES 密钥而不是 128 位?
- android - imageView.setImageBitmap(位图); 不适用于有效、正确缩放的位图
- apache - 在 Apache .htaccess 中,设置 Header 设置 Content-disposition,如何从 QUERY_STRING 值传递文件名
- android - 如何使用 CompactDecimalFormat 实际获得缩写符号?
- excel - Excel VBA:过滤、剪切和粘贴到另一个工作表