java - Spring Batch - 动态作业选择

标签 java spring spring-boot spring-batch

我越来越熟悉 Spring Batch,因为我相信我们的项目需要用它来替换当前的代码库(以使开发更快、更容易测试)。

我们当前的代码库具有以下重要特征:

  • 一个代码库 - 但有很多批处理(我们在批处理之间重用代码)
  • 目前,我们的代码库中有多个 main() 方法,并且只有不同的 shell 脚本来调用适当的主类。

我希望在 Spring 批处理中解决以下问题:

我已经启动了一个基于 Spring Batch 示例的虚拟实验项目:https://spring.io/guides/gs/batch-processing/

我想在同一个代码库中保留多个批处理进程(作业,我认为,如果我们谈论 Spring Batch)。但是,目前,如果我在代码中添加更多作业,所有这些作业都会被执行。更糟糕的是,我在 SpringBoot 主类中添加了一个应用程序监听器,结果发现,作业在 ApplicationReadyEvent 之前执行 - 这对我来说似乎很糟糕,几乎就像在构造函数中运行业务逻辑一样。

我的问题是:

  • 如何选择要运行的作业(基于命令行参数)
  • 如何确保作业在 ApplicationReadyEvent 之后启动

提前致谢。

最佳答案

有各种各样的问题。

1. 要禁用在启动时自动启动所有作业,只需配置此 Spring Boot property :

spring.batch.job.enabled=false # Do not execute all Spring Batch jobs in the context on startup.

2. 你会像这样运行作业:

java -Dspring.batch.job.names=prepareTeaJob -jar target/0910-job-parameters-cli-0.0.2-SNAPSHOT.jar sugarAmount="no sugar"

糖量有Job参数。属于此列表的完整示例托管于 my Github Repository here 。顺便说一句,如果您正在学习 Spring Batch,还有更多涉及这些各种 Spring Batch 主题的示例。

3. 不确定您所说的“ApplicationReadyEvent”是什么。据我所知,作业应该在 Spring 上下文完全初始化后执行。

关于java - Spring Batch - 动态作业选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099661/

相关文章:

java - 如何根据 ListView 项的名称分离值? (详尽的描述)

java - 两个 jar 之间的 Spring Boot 和 @ComponentScan

使用 Maven 测试时 Spring Boot 应用程序未读取 application.properties 文件

spring-boot - 从 log4j2.xml 访问环境变量

java - 如何根据Java Spring中的当前用户角色修剪Swagger文档?

javascript - 用户界面中的 Spring boot AJAX POST 请求和 knockout.js 调试错误

java - Java Spring API 中的 PATCH 请求

java - Raspberry Pi 上的 RMI 不起作用连接拒绝主机 : 127. 0.0.1

java - 如何在 spring mvc 中动态切换语言?

java - Spring Service Activator - 我们可以对 Java 中的两个不同输入 channel 使用相同的方法和 ref 吗?