从Control-M启动Spring Batch作业

时间:2019-07-18 22:29:41

标签: java spring jms spring-batch control-m

我在Spring Batch中开发了作业,以替换以前使用bash脚本完成的数据加载过程。

我公司选择的调度程序是control-m。旧的bash脚本是使用文件监视程序在文件到达时从control-m触发的。

由于我无法控制的原因,我们仍然需要使用control -m。无法使用Spring Boot或绑定到Web服务器的任何其他框架。

安全的方法似乎是将spring batch应用程序打包为jar并使用“ java -jar”从control-m触发作业,但是考虑到我们有20多个作业,这似乎不是正确的方法。 / p>

我想知道是否有可能一次触发该应用程序(如守护进程)并使用JMS或任何其他方法与之通信。这样,我们就不需要产生多个jvm(考虑到作业可以同时运行)。

我愿意接受不同的解决方案。请随时教我解决此用例的最佳方法。

2 个答案:

答案 0 :(得分:1)

  

安全的方法似乎是将spring batch应用程序打包为jar并使用“ java -jar”从control-m触发作业,但是考虑到我们有20多个作业,这似乎不是正确的方法。 / p>

IMO,按需运行作业是必经之路,因为这是使用资源的最有效方式。让JVM运行24/7并使其每隔一段时间运行一次批处理作业会浪费资源,因为JVM将在运行调度之间闲置。如果您关心的是包装方面,则可以将所有作业包装在一个jar中,并在启动时使用spring boot属性spring.batch.job.names指定要运行的作业。

  

我想知道是否有可能一次触发该应用程序(如守护进程)并使用JMS或任何其他方法与之通信。这样,我们就无需生成多个jvm(考虑到作业可能同时运行)。

我建议在JVM中公开REST端点,并实现一个控制器,该控制器可按需启动批处理作业。您可以在Running Jobs from within a Web Container部分中找到示例。在这种情况下,作业名称及其参数可以作为请求参数传递。

另一种方法是结合使用Spring Batch和Spring Integration使用JMS请求(JobLaunchRequest)启动作业。 Launching Batch Jobs through Messages中的代码示例对此方法进行了详细说明。

希望这会有所帮助。

答案 1 :(得分:0)

除了Mahmoud提供的有用答案外,Control-M不适用于守护程序。当然,您可以 启动一个守护程序,但是任何在相当长的时间内(即数周甚至更长时间)运行的程序都容易出错,并且您通常会以运行该Control-M的守护程序结束不再“知道”(例如,如果系统出现问题,导致Control-M代理假定守护程序作业失败,然后启动另一个作业)。

当我没有其他可用方法时,我曾经在Control-M中将守护程序添加为批处理作业,但是检查多个守护程序,执行停止/启动以及执行各种内务处理任务的其他作业会产生开销。最好避免。