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
반응형
댓글