Springを使用して非同期モードでジョブを実行するには、非常に良い方法がありますが、それはちょうどJobLauncher
の設定方法の問題です。 JobLauncher
にはtaskExecutor
のプロパティがあり、そのプロパティに割り当てられている実装に応じて非同期実行をアクティブ化できます。
Springが提供できるすべてのTaskExecutor
タイプがあります。必要に応じて、バッチ非同期ジョブを実行する最適な方法を選択してください。 Task Executors Types in Spring
たとえば、SimpleAsyncTaskExecutor
は、すべての呼び出しで新しいThread
を作成し、実行頻度が高い場合にパフォーマンスの問題を引き起こす可能性があるタスク実行者です。一方、リソースを再利用し、システムの効率を最大化するために、プール機能を提供するTaskExecutors
タイプもあります。ここで
はThreadPoolTaskExecutor
を設定する方法の小さな例です。
A)を構成ThreadPoolTaskExecutor豆
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(15);
taskExecutor.setMaxPoolSize(20);
taskExecutor.setQueueCapacity(30);
return taskExecutor;
}
B)を構成JobLauncher豆
@Bean
public JobLauncher jobLauncher(ThreadPoolTaskExecutor taskExecutor, JobRepository jobRepository){
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setTaskExecutor(taskExecutor);
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}
C)あなたのJobLauncher
とあなたを注入しますJobs
構成
@Autowired
private JobLauncher jobLauncher;
@Autowired
@Qualifier("job1-file-A")
private Job job1;
@Autowired
@Qualifier("job2-file-B")
private Job job2;
D)最後に、あなたのSpringBootクラス@EnableBatchProcessing
と@EnableScheduling
@EnableBatchProcessing
@EnableScheduling
@SpringBootApplication
public class MyBatchApp {
にジョブ
@Scheduled(cron = "*/1 * * * * *")
public void run1(){
Map<String, JobParameter> confMap = new HashMap<>();
confMap.put("time", new JobParameter(System.currentTimeMillis()));
JobParameters jobParameters = new JobParameters(confMap);
try {
jobLauncher.run(job1, jobParameters);
}catch (Exception ex){
logger.error(ex.getMessage());
}
}
@Scheduled(cron = "*/1 * * * * *")
public void run2(){
Map<String, JobParameter> confMap = new HashMap<>();
confMap.put("time", new JobParameter(System.currentTimeMillis()));
JobParameters jobParameters = new JobParameters(confMap);
try {
jobLauncher.run(job2, jobParameters);
}catch (Exception ex){
logger.error(ex.getMessage());
}
}
E)のスケジュール