コントローラからバッチジョブを実行しようとしています。これは、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アノテーションを削除して、いつでもそれを実行しようとしています。コントローラーから発射する方法はありますか?
ありがとう!
コントローラに挿入できる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());
}
}
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
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