Spring 批次始终以 Spring 启动:spring.batch.job.enabled=false 不起作用

Spring Batch always starts with Spring Boot: spring.batch.job.enabled=false DOES NOT work

我有一个名为 MyApplication 的 Spring 启动应用程序。 我还有一个名为 JobStartupRunner 的 Spring 批处理应用程序。 每当我将 MyApplication 作为 Spring 启动应用程序启动时,JobStartupRunner 也会运行。我在 application.properties 文件中确实有 spring.batch.job.enabled=false,但它不起作用。

代码如下: ...

@SpringBootApplication
@EnableJpaRepositories(repositoryBaseClass = RepositoryImpl.class)
public class MyApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);

    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MyApplication.class);
    }

}

...

这是 Spring 批处理应用程序: ...

@SpringBootApplication
public class JobStartupRunner implements CommandLineRunner {

    @Autowired
    ApplicationContext context;

    public static void main(String[] args) {
        SpringApplication.run(JobStartupRunner.class, args);
    }

    @Override
    public void run(String...args) throws Exception {
        JobLauncher jobLauncher = context.getBean(JobLauncher.class);
        JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters();
        Long jobId = null;
        try {
          jobId = jobLauncher.launchJob(jobParameters);
        } catch (JobExecutionAlreadyRunningException e) {
            e.printStackTrace();
        } catch (JobRestartException e) {
            e.printStackTrace();
        } catch (JobInstanceAlreadyCompleteException e) {
             e.printStackTrace();
        } catch (JobParametersInvalidException e) {
               e.printStackTrace();
        }
        System.out.println("Ran with JOB ID: " + jobId);
   }
}

... 这是 Spring 批处理配置 class: ...

@Configuration("jobConfig")
@ComponentScan(basePackages = "com.mystuff")
@PropertySource("classpath:application.properties")
@EnableAutoConfiguration
@EnableBatchProcessing
public class JobConfig extends AbstractJobConfig {
 <more stuff here>
}

...

如何防止 Spring Batch 应用程序在 "master" 应用程序启动时启动。

谢谢。

spring.batch.job.enabled 仅影响声明为 spring bean 的 Job

但是作业现在开始,因为您通过实现 CommandLineRunner 而不是将它们声明为 Job bean 来手动启动它,因此 spring.batch.job.enabled 对它们没有影响。

您可以简单地在组件扫描中排除 JobStartupRunner,这样它将不再执行:

@SpringBootApplication
@ComponentScan(excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=JobStartupRunner.class)})
public class MyApplication extends SpringBootServletInitializer {

}