【发布时间】:2021-11-11 07:09:19
【问题描述】:
我是 spring-integration 的新手,我想要实现的是从外部 Web 应用程序启动 spring-batch 作业。
批次以两种不同的方式运行。 Cron(超出此问题的范围)并由用户操作手动启动,如下图所示
现在每个批次的配置如下:
@SpringBootApplication
@EnableBatchProcessing
public class Batch1Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Batch1Application.class)
.web(WebApplicationType.NONE)
.registerShutdownHook(true)
.run(args);
}
}
当前,当 Web 应用程序接收到一个操作时,它会调用 cron 配置中使用的相同 sh 脚本:
//...
ProcessBuilder processBuilder = new ProcessBuilder(List.of(/*path to batch-1-script.sh*/));
Process process = processBuilder.start();
//...
脚本执行如下操作:java -jar batch1.jar
它工作正常,每个应用程序的上下文不共享。
现在我想转到 spring-integration。我发现了几篇关于 spring-integration 和 spring-batch-intergartion 的文章/视频,但它们都使用相同的网络应用程序来使用简单的 @ 启动作业987654326@(因为上下文包含所有需要的 bean)。
我的问题是如何让每批都监听消息,然后开始执行?
我需要将它们全部转换为网络应用程序并在它们上添加 spring-integration 吗?
【问题讨论】:
-
不,您不需要 Web 服务器来使用 Spring Integration,您的应用程序也不需要是 Web 应用程序。您可以拥有任何类型的 Java 应用程序,将某些内容放在 Spring Integration 通道上,让它做它需要做的事情。例如,将某些内容放入通道不一定需要从 Spring MVC 控制器中完成。
-
如果不需要服务器,我的批处理(jvm)如何监听传入的消息?目前,每个批次都在单独的 jvm(进程)中运行,并在完成后立即关闭
标签: java spring spring-boot spring-batch spring-integration