Java Spring Boot 加 Spring Batch 创建 Jar 并仅运行特定作业
Posted
技术标签:
【中文标题】Java Spring Boot 加 Spring Batch 创建 Jar 并仅运行特定作业【英文标题】:Java Spring Boot plus Spring Batch create Jar and run specific job only 【发布时间】:2020-09-24 23:34:33 【问题描述】:我正在尝试使用带有 Spring Batch 应用程序的 Spring Boot,它会有多个作业。
当我尝试构建 jar(假设只有一个作业)时,它仍然会启动应用程序并实际运行可用的作业。
mvn clean package
我只是想在这里构建一个 Jar,不想实际运行任何 Job。
稍后,一旦 Jar 可用,我可以传递一些参数来运行特定的 Job。目前我的代码中只有一项工作,以后会有更多工作。但我连一份工作都做不了。
这是我迄今为止根据所有在线建议尝试的方法。
BatchConfiguration.java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration
private static final Logger logger = LoggerFactory.getLogger(BatchConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public FileDTO fileDTO;
@Bean
public Job fetchJob(Step step)
return jobBuilderFactory
.get("My Job")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
@Bean
public Step getData()
return stepBuilderFactory
.get("get data")
.<FileDTO, FileDTO>chunk(1)
.reader(FileReader())
.processor(new FileProcessor())
.writer(new FileWriter())
.build();
application.properties
spring.datasource.url=jdbc:postgresql://dbhost:1000/db
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.platform=postgresql
spring.batch.job.names=
我试图在这里为 spring.batch.job.names 属性留空。
运行 mvn clean package,它帮助我在不运行作业的情况下编译和构建 jar。
现在,我正在尝试给出参数,
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
它根本不启动工作。
请注意,如果我从 application.properties 中删除属性 spring.batch.job.names 并按照步骤操作,mvn clean package => 将运行作业并创建 Jar。这是我不想要的。 稍后我将有更多作业,我不想在创建 Jar 时运行这些作业。
我在这里错过了什么?
【问题讨论】:
mvn clean package
不会运行您的工作,但任何带有 @SpringBootTest
注释的 Junit 测试都可以。尝试使用作业设置您的 application.properites
并运行:mvn clean package -DskipTests
【参考方案1】:
我只是想在这里构建一个 Jar,不想实际运行任何 Job。
您需要为此设置属性spring.batch.job.enabled=false
,而不是添加空属性spring.batch.job.names=
。
它根本不启动工作。
如果您删除空属性 spring.batch.job.names=
并使用以下命令运行您的作业:
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
那么它应该可以工作。
【讨论】:
以上是关于Java Spring Boot 加 Spring Batch 创建 Jar 并仅运行特定作业的主要内容,如果未能解决你的问题,请参考以下文章
java——spring boot集成RabbitMQ——发布/订阅模式——应用场景