본문 바로가기
IT/Spring

[Spring] - 스프링 부트(Spring Boot) Quartz Scheduler 사용법

by 차이나는 개발자 2022. 7. 5.
728x90
반응형

#스프링 부트(Spring Boot) Quartz Scheduler 사용법

 

 

1. pom.xml 파일에 spring-boot-starter-quartz 의존성을 추가해줍니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

 

 

2. 서버 실행 시 Console 창에 아래와 같은 로그가 뜨면 정상적으로 적용된 것 입니다.

 

 

3. TestJobA.java

-10초 주기로 실행하는 Job을 생성합니다.

package com.example.demo;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;

@Component
public class TestJobA extends QuartzJobBean {

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

	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
		log.info("10초마다 Job 실행");
	}

}

 

 

4. JobConfig

-생성한 Job을 스케줄러에 적용합니다.

package com.example.demo;

import static org.quartz.JobBuilder.newJob;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;

import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JobConfig {
	
	@Autowired
	private Scheduler scheduler; // 쿼츠 스케줄 객체
	
	@PostConstruct
	public void run(){
		JobDetail detail = runJobDetail(TestJobA.class, new HashMap<>());
		
		try {
            	// 크론형식 지정 후 스케줄 시작
			scheduler.scheduleJob(detail, runJobTrigger("0/10 * * * * ?"));
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
		
	}
	
	public Trigger runJobTrigger(String scheduleExp){
        	// 크론 스케줄 사용
		return TriggerBuilder.newTrigger()
				.withSchedule(CronScheduleBuilder.cronSchedule(scheduleExp)).build();
	}
	
	public JobDetail runJobDetail(Class job, Map params){
		JobDataMap jobDataMap = new JobDataMap();
		jobDataMap.putAll(params);
	    // 스케줄 생성
		return newJob(job).usingJobData(jobDataMap).build();
	}
	
}

 

 

5. 서버 재실행시 10초마다 Job이 실행되는 것을 확인하실 수 있습니다.

 

 

 

728x90
반응형

댓글