gpt4 book ai didi

java - 从 control-m 启动 Spring 批处理作业

转载 作者:行者123 更新时间:2023-12-02 09:40:35 31 4
gpt4 key购买 nike

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

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

由于我无法控制的原因,我们仍然需要使用control-m。使用 Spring Boot 或任何其他与网络服务器绑定(bind)的框架是不可能的。

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

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

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

最佳答案

The safe approach seems to be to package the spring batch application as a jar and trigger from control-m the job using "java -jar", but this doesn't seem the right way considering we have 20+ jobs.

IMO,按需运行作业是正确的选择,因为这是使用资源的最有效方式。让 JVM 24/7 全天候运行并使其偶尔运行一次批处理作业会浪费资源,因为 JVM 在运行计划之间会处于空闲状态。如果您关心的是打包方面,您可以将所有作业打包在一个 jar 中,并在启动时使用 spring boot 属性 spring.batch.job.names 来指定要运行的作业。/p>

I was wondering if it's possible to trigger the app once (like a deamon) and communicate with it using JMS or any other approach. In this way we wouldn't need to spawn multiple jvms (considering jobs might run simultaneously).

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

另一种方法是结合使用 Spring Batch 和 Spring Integration,通过 JMS 请求 (JobLaunchRequest) 启 Action 业。 Launching Batch Jobs through Messages 中的代码示例详细解释了此方法。 .

关于java - 从 control-m 启动 Spring 批处理作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57103377/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com