簡體   English   中英

為什么Spring Boot Batch作業只運行一次?

[英]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)

JobLauncherJob bean可以自動連接到您的調度程序類,因為上下文已經初始化。

希望能幫助到你 !!

您需要創建JobLauncher bean並在調度程序中使用它來啟動新的作業實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM