如何使用 CommandLineJobRunner 调用嵌入在 Spring Boot 应用程序中的 Spring Batch 作业

Posted

技术标签:

【中文标题】如何使用 CommandLineJobRunner 调用嵌入在 Spring Boot 应用程序中的 Spring Batch 作业【英文标题】:How to invoke Spring Batch Jobs embedded in a Spring Boot Application using CommandLineJobRunner 【发布时间】:2020-07-11 10:39:27 【问题描述】:

我有一个包含 2 个模块的 Spring Boot 应用程序。首先是一个 web 模块,它公开了一个 rest API,它允许用户将一些数据放入应用程序。第二个模块是一组批处理作业,它们作用于这些配置并执行后台处理。

我能够在应用程序中创建 REST API 和批处理作业,作为起点,我使用 REST 端点使用 JobLauncher 启动我的批处理作业。

我的下一个任务是打包应用程序并部署 Web 应用程序以公开 REST 端点,并创建 shell 脚本以使用企业调度程序启动批处理作业。

我正在使用 Maven 和 spring-boot-maven-plugin 来构建可执行 jar。 当我执行 java -jar myApp.jar 但是,当我尝试通过执行来运行批处理作业时,REST API 正在暴露 java -cp myApp.jar org.springframework.batch.core.launch.support.CommandLineJobRunner com.example.myJobConfig job1 runDate=2020-02-29

我收到以下错误 错误:无法找到或加载主类 org.springframework.batch.core.launch.support.CommandLineJobRunner

我正在寻求有关如何在单个应用程序中同时拥有 Web 应用程序和批处理作业并使用 shell 脚本启动批处理作业的帮助。

【问题讨论】:

【参考方案1】:

我正在使用 Maven 和 spring-boot-maven-plugin 构建可执行 jar

在这种情况下,您可以使用以下命令在命令行上运行您的作业:

java -jar myApp.jar --spring.batch.job.names=job1 runDate=2020-02-29

【讨论】:

我昨天遇到了这种方法并尝试过。我有 2 个以这种方式执行的问题。 1)我得到一个 2020-04-02 11:55:42.608 INFO 9712 --- [main] osbabJobLauncherCommandLineRunner :运行默认命令行与 h:[--spring.batch.job.names=job1, runDate =2020-01-31]。但是批处理作业未完成或失败,并且我在批处理元数据表 BATCH_JOB_EXECUTION 中看不到任何条目。 这是我猜想与您的作业存储库配置有关的另一个问题。您最初问题的答案是使用“java -jar ...”而不是“java -cp ...”,因为您使用 spring-boot-maven-plugin 生成一个胖 jar。 感谢您的解决方案。

以上是关于如何使用 CommandLineJobRunner 调用嵌入在 Spring Boot 应用程序中的 Spring Batch 作业的主要内容,如果未能解决你的问题,请参考以下文章

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等