[英]Why Spring Boot Batch job is running just one time?
我正在使用彈簧靴。 我有一個我用這些類實現的批處理作業:
我的主要課程是:
@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中,因此您的批處理作業不會通過從main
方法調用SpringApplication.run(...)
而自動啟動。
spring.batch.job.enabled=false
這將簡單地初始化Spring Batch配置,而不是實際開始工作。
2.在Spring Boot Batch作業開始類上注釋@EnableScheduling
,即在代碼中的Application
類上。
3.從JobScheduler
類中刪除@EnableScheduling
注釋,並從runJob()
調用jobLauncher.run(job, jobParameters)
,而不是調用SpringApplication.run(MyBatchConfig.class)
。
JobLauncher
和Job
bean可以自動連接到您的調度程序類,因為上下文已經初始化。
希望能幫助到你 !!
您需要創建JobLauncher
bean並在調度程序中使用它來啟動新的作業實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.