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 并仅运行特定作业的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 接口加解密,新姿势来了!

java——spring boot集成RabbitMQ——发布/订阅模式——应用场景

Spring boot Mybatis

使用spring boot devtools不要多此一举加try...catch

spring boot 访问项目时加项目名称

spring boot加mybatis使用Map返回值设置