为什么Spring Boot Batch作业仅运行一次?

我正在使用弹簧靴。我有一个使用这些类实现的批处理作业:

我的主要课程是:

@SpringBoot" title="SpringBoot">SpringBootApplication

@ComponentScan("com.batch")

@PropertySource("classpath:application.properties")

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class);

}

}

我的调度程序是:

@Component

@EnableScheduling

public class JobScheduler {

@Scheduled(fixedRate = 10000)

public void runJob() {

SpringApplication.run(MyBatchConfig.class);

}

}

我的批处理配置类是:

@Configuration

@EnableBatchProcessing

public class MyBatchConfig {

@Value("${database.driver}")

private String databaseDriver;

@Value("${database.url}")

private String databaseUrl;

@Value("${database.username}")

private String databaseUsername;

@Value("${database.password}")

private String databasePassword;

@Bean

public Job myJob(JobBuilderFactory jobs, Step s) {

Job job = jobs.get("myJob")

.incrementer(new RunIdIncrementer())

.flow(s)

.end()

.build();

return job;

}

@Bean

public Step myStep(StepBuilderFactory stepBuilderFactory, ItemReader<Account> reader,

ItemWriter<Person> writer, ItemProcessor<Account, Person> processor) {

TaskletStep step = stepBuilderFactory.get("myStep")

.<Account, Person>chunk(1)

.reader(reader)

.processor(processor)

.writer(writer)

.build();

step.setAllowStartIfComplete(true);

return step;

} ...

现在,我的问题是:

调度程序可以工作,并且每十秒钟重复一次,但是作业仅在应用程序启动时执行(读取器,处理器和编写器在启动时仅执行一次),并且似乎

SpringApplication.run(MyBatchConfig.class);

对重新运行作业没有影响。

我该怎么办?

提前致谢

回答:

这就是我能想到的

1.您将此属性放在application.properties中,因此您的批处理作业不会通过调用SpringApplication.run(...)from

main方法自动启动。

spring.batch.job.enabled=false

这将仅初始化您的Spring Batch配置,而不实际启动作业。

2. @EnableScheduling 在您的Spring Boot Batch Job起始类上添加注释,即在Application

代码中的类上。

3.取出@EnableScheduling从注释JobScheduler类和呼叫,jobLauncher.run(job,

jobParameters)runJob()而不是调用SpringApplication.run(MyBatchConfig.class)

JobLauncher``Job因为上下文已经初始化,所以&bean可以自动连接到您的调度程序类。

希望能帮助到你 !!

以上是 为什么Spring Boot Batch作业仅运行一次? 的全部内容, 来源链接: utcz.com/qa/425457.html

回到顶部