hanker

spring boot(java) - 스케쥴러(scheduler) 작업 중지시키기 (2) - quartz 본문

SPRING

spring boot(java) - 스케쥴러(scheduler) 작업 중지시키기 (2) - quartz

hanker 2021. 4. 12. 00:25

기존에 작업했던 스케쥴러 만들기 (1)를 이어서 시작한다.

hanke-r.tistory.com/101

 

SpringBoot - 스케쥴러(Scheduler) 만들기

스케쥴러 만들기 (quartz) 우선 Spring boot 프로젝트를 만들고 pom.xml에 quartz dependency를 추가한다. org.springframework.boot spring-boot-starter-quartz 추가 후 프로젝트를 실행하면 Scheduler class: '..

hanke-r.tistory.com

두개의 작업을 실행시키기 위해 기존에 run패키지에서 Job클래스를 하나 더 추가해준다

JobA와 JobB의 실행을 위해 JobSetting.java 코드를 수정한다.

@Configuration
public class JobSetting {

    @Autowired
    private Scheduler scheduler;

    @PostConstruct
    public void start(){

        JobDetail jobDetailA = buildJobDetail(HankerJobA.class, new HashMap());
        JobDetail jobDetailB = buildJobDetail(HankerJobB.class, new HashMap());

        try{
            scheduler.scheduleJob(jobDetailA, buildJobTrigger("0/20 * * * * ?"));
            scheduler.scheduleJob(jobDetailB, buildJobTrigger("0/30 * * * * ?"));
        } catch(SchedulerException e){
            e.printStackTrace();
        }
    }

    public Trigger buildJobTrigger(String scheduleExp){
        return TriggerBuilder.newTrigger()
                .withSchedule(CronScheduleBuilder.cronSchedule(scheduleExp)).build();
    }

    public JobDetail buildJobDetail(Class job, Map params){
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.putAll(params);

        return newJob(job).usingJobData(jobDataMap).build();
    }
}
  • jobDetailA = 20초마다 실행
  • jobDetailB = 30초마다 실행

( 리스트로 담아서 실행시키고 싶은데 방법을 찾으면 수정할 예정이다. )

 

프로젝트를 실행시켜보자

잘 실행된다.

 

이제 JobA의 작업을 중지시켜보자.

 

JobA의 jobKey를 생성한 후 특정시간에 도달하면 중지하는 소스이다.

임시로 시간으로 지정했지만, DB를 연결해서 값을 불러와 중지할 수도 있다.

 

@Component
public class HankerJobA extends QuartzJobBean {

    private static final Logger log = LoggerFactory.getLogger(HankerJobA.class);

    private JobKey jobKey = null;

    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;


    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("작업 스케쥴러 A");
        jobKey = jobExecutionContext.getJobDetail().getKey();

        Scheduler scheduler = schedulerFactoryBean.getScheduler();

        // 조건을 걸기위해 DateTime 설정
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        Date nowDate = new Date();
        try{
            Date date = sdf.parse("2021-04-12 12:12");
            String newDate = sdf.format(nowDate);

            nowDate = sdf.parse(newDate);

            if(nowDate.compareTo(date) == 0){
                scheduler.pauseJob(jobKey);
                log.info("작업이 종료되었습니다.");
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

 

Date, String 변환 설정

hanke-r.tistory.com/92?category=751708

 

JAVA - String to Date (String → Date) 바꾸기

String to Date (String → Date) String에서 Date로 형변환 SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date to = transFormat.parse("Date로 변환할 String Data"); Date to..

hanke-r.tistory.com

 

이제 프로젝트를 실행해보자.

로그를 보면 설정한 시간에 JobA의 스케쥴이 중지된 걸 확인할 수 있다.