web-dev-qa-db-ja.com

コントローラーから春のバッチジョブを実行する

コントローラからバッチジョブを実行しようとしています。これは、cronジョブによって起動されるか、特定のリンクにアクセスすることによって起動されます。私はSpring Bootを使用していますが、XMLは単なる注釈ではありません。

私の現在の設定では、次のBeanを含むサービスがあります。

@EnableBatchProcessing
@PersistenceContext
public class batchService {

    @Bean
    public ItemReader<Somemodel> reader() {
        ...
    }

    @Bean
    public ItemProcessor<Somemodel, Somemodel> processor() {
        return new SomemodelProcessor();
    }

    @Bean
    public ItemWriter writer() {
        return new CustomItemWriter();
    }

    @Bean
    public Job importUserJob(JobBuilderFactory jobs, Step step1) {
        return jobs.get("importUserJob")
                .incrementer(new RunIdIncrementer())
                .flow(step1)
                .end()
                .build();
    }

    @Bean
    public Step step1(StepBuilderFactory stepBuilderFactory,       
            ItemReader<somemodel> reader,
            ItemWriter<somemodel> writer,
            ItemProcessor<somemodel, somemodel> processor) {

        return stepBuilderFactory.get("step1")
                .<somemodel, somemodel> chunk(100)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }   
}   

@ConfigurationアノテーションをbatchServiceクラスの上に配置すると、アプリケーションを実行するとすぐにジョブが開始されます。正常に終了し、すべてが正常です。今私は@Configurationアノテーションを削除して、いつでもそれを実行しようとしています。コントローラーから発射する方法はありますか?

ありがとう!

14
Damian

コントローラに挿入できるJobLauncherを使用して、プログラムでバッチジョブを起動できます。この例のコントローラーを含む詳細については、 Spring Batchのドキュメント を参照してください。

@Controller
public class JobLauncherController {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
        jobLauncher.run(job, new JobParameters());
    }
}
18
Andy Wilkinson

Src/main/resourcesにapplication.ymlファイルを作成し、次の設定を追加する必要があります:

spring.batch.job.enabled: false

この変更により、Spring Bootの開始時にバッチジョブが自動的に実行されなくなります。また、特定のリンクがあるとバッチジョブがトリガーされます。

ここで私のサンプルコードをチェックしてください: https://github.com/pauldeng/aws-elastic-beanstalk-worker-spring-boot-spring-batch-template

24
Paul Deng

Spring Bootを使用しているので、@Configurationアノテーションを追加し、代わりに起動時にジョブを起動しないようにapplication.propertiesを設定します。起動時にジョブを実行するための自動構成オプションの詳細については、Spring Bootのドキュメントをご覧ください http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ htmlsingle /#howto-execute-spring-batch-jobs-on-startup

4
Michael Minella