spring boot/batch 通过代码禁用批量自动启动

Posted

技术标签:

【中文标题】spring boot/batch 通过代码禁用批量自动启动【英文标题】:spring boot/batch disable batch auto start via code 【发布时间】:2018-02-09 04:51:06 【问题描述】:

我正在编写一个 spring 批处理应用程序,其中包含需要按特定顺序执行的不同作业。 为了做到这一点,我通过 JobLauncher 手动运行作业,并通过在我的属性文件中添加以下属性来禁用 Spring 批处理提供的自动启动功能:

spring.batch.job.enabled=false

我想直接在代码中禁用这个功能,而不是依赖任何人都可以访问和修改的配置文件。

有没有办法做到这一点?

【问题讨论】:

你可以试试JavaConfig Roger Thomas 的answer 有帮助吗?想法是始终将硬编码的值放入代码中。 嗨@SabirKhan,感谢您的回复。它正在工作,但可以通过在属性文件中明确设置“spring.batch.job.enabled=true”来绕过它。不过总比没有好。 【参考方案1】:
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.batch.job", name = "enabled", havingValue = "true", matchIfMissing = true)
public JobLauncherCommandLineRunner jobLauncherCommandLineRunner(
        JobLauncher jobLauncher, JobExplorer jobExplorer) 
    JobLauncherCommandLineRunner runner = new JobLauncherCommandLineRunner(
            jobLauncher, jobExplorer);
    String jobNames = this.properties.getJob().getNames();
    if (StringUtils.hasText(jobNames)) 
        runner.setJobNames(jobNames);
    
    return runner;

这是来自BatchAutoConfiguration

据此判断,您可以尝试添加自己的 JobLauncherCommandLineRunner 实现,它什么都不做。这会影响@ConditionalOnMissingBean,它不应该运行。

【讨论】:

以上是关于spring boot/batch 通过代码禁用批量自动启动的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Batch 中的 Hibernate_sequence 错误(预定)

如何防止我的 Spring Boot Batch 应用程序在执行测试时运行?

spring-boot-starter-jta-atomikos 和 spring-boot-starter-batch

Maven 打包“JAR”不适用于 spring-boot-starter-batch

Spring boot Batch 的启动原理- Configuration

Spring boot Batch - JobLauncherApplicationRunner