From 92681899741167f5553817e8b016151f673907c2 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Tue, 11 May 2021 14:55:14 +0900 Subject: [PATCH] spring batch : contextRefreshedEventListener --- .../job/CreateArticleJobConfig.java | 4 +- .../ContextRefreshedEventListener.java | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 spring-batch/src/main/java/com/example/springbatch/application/listener/ContextRefreshedEventListener.java diff --git a/spring-batch/src/main/java/com/example/springbatch/application/job/CreateArticleJobConfig.java b/spring-batch/src/main/java/com/example/springbatch/application/job/CreateArticleJobConfig.java index b4b67bcf..8502b647 100644 --- a/spring-batch/src/main/java/com/example/springbatch/application/job/CreateArticleJobConfig.java +++ b/spring-batch/src/main/java/com/example/springbatch/application/job/CreateArticleJobConfig.java @@ -38,7 +38,7 @@ public class CreateArticleJobConfig { @Bean public Job createArticleJob() { return jobBuilderFactory.get("createArticleJob") - .incrementer(new RunIdIncrementer()) +// .incrementer(new RunIdIncrementer()) .start(createArticleStep()) .build(); } @@ -49,7 +49,7 @@ public class CreateArticleJobConfig { .chunk(1000) .reader(createArticleReader()) .processor(createArticleProcessor()) - .writer(createArticleWriterJDBC()) + .writer(createArticleWriterJPA()) .build(); } diff --git a/spring-batch/src/main/java/com/example/springbatch/application/listener/ContextRefreshedEventListener.java b/spring-batch/src/main/java/com/example/springbatch/application/listener/ContextRefreshedEventListener.java new file mode 100644 index 00000000..d5a3e773 --- /dev/null +++ b/spring-batch/src/main/java/com/example/springbatch/application/listener/ContextRefreshedEventListener.java @@ -0,0 +1,47 @@ +package com.example.springbatch.application.listener; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.batch.core.BatchStatus; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.explore.JobExplorer; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.context.ApplicationListener; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.ContextRefreshedEvent; + +import java.util.Date; +import java.util.Set; + +@Configuration +@Slf4j +@RequiredArgsConstructor +public class ContextRefreshedEventListener implements ApplicationListener { + private final JobExplorer jobExplorer; + private final JobRepository jobRepository; + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + log.info("Stop running jobs."); + for (String jobName : jobExplorer.getJobNames()) { + Set runningJobExecutions = jobExplorer.findRunningJobExecutions(jobName); + + for (JobExecution jobExecution : runningJobExecutions) { + log.warn("!!!!!!!!!!: {}, {} ", jobExecution.getJobId(), jobExecution.getStatus()); + jobExecution.setStatus(BatchStatus.STOPPED); + jobExecution.setEndTime(new Date()); + for(StepExecution stepExecution : jobExecution.getStepExecutions()) { + if (stepExecution.getStatus().isRunning()) { + stepExecution.setStatus(BatchStatus.STOPPED); + stepExecution.setEndTime(new Date()); + jobRepository.update(stepExecution); + } + } + jobRepository.update(jobExecution); + log.info("Updated job execution status: {}", jobExecution.getJobId()); + } + } + log.info("Stopped running jobs."); + } +}