spring boot/batch disable batch auto start via code 通过代码禁用Spring Boot/Batch的自动批处理启动

10 浏览
0 Comments

spring boot/batch disable batch auto start via code 通过代码禁用Spring Boot/Batch的自动批处理启动

我正在编写一个Spring Batch应用程序,其中包含需要按特定顺序执行的不同任务。

为了实现这一点,我通过JobLauncher手动运行作业,并通过在属性文件中添加以下属性来禁用Spring Batch提供的自动启动功能:

spring.batch.job.enabled=false

我希望能够直接在代码中禁用此功能,而不是依赖于可以被任何人访问和修改的配置文件。

有办法实现吗?

0
0 Comments

问题描述:如何通过代码禁用Spring Boot的批处理自动启动功能。

问题原因:在Spring Boot的BatchAutoConfiguration类中,通过注解配置的方式决定是否启用批处理功能。具体代码如下:

(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;
}

解决方法:根据上述代码,可以尝试添加自己的JobLauncherCommandLineRunner实现类,并在该类中不执行任何操作。这样做会影响Spring Boot的批处理自动启动功能,使其不会执行。

public class CustomJobLauncherCommandLineRunner extends JobLauncherCommandLineRunner {
    public CustomJobLauncherCommandLineRunner(JobLauncher jobLauncher, JobExplorer jobExplorer) {
        super(jobLauncher, jobExplorer);
    }
    // 空实现,不做任何操作
    @Override
    public void run(String... jobNames) {
    }
}

通过使用自定义的CustomJobLauncherCommandLineRunner类替换原有的JobLauncherCommandLineRunner类,即可禁用Spring Boot的批处理自动启动功能。

0