본문 바로가기
Framework/Spring-Quartz

(2) Spring Scheduler vs Quartz

by 조훙 2022. 11. 24.

Spring Scheduler

  • Spring에 통합된 Scheduler
  • 별도의 구성 없이 Spring Boot Starter 에 포함되어 있음
  • Annotation 형태로 쉽게 사용 가능
  • 별도의 Schedule 을 변경하거나, 별도의 Clustering 기능 부재
  • 간단한 Schedule 형태에 적용 가능
  • Scheduler method 반드시 void 형으로 지정 해야
  • method는 별도의 파라미터를 지정 할 수 없다.
  • Main Thread에 통합 수행되어 하나의 작업이 완료 된 이후 다음 작업이 수행 된다.

Code 예시

@EnableScheduling      // Annotation 설정으로 초기 구성 완료
@SpringBootApplication
public class Application() {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
public class Scheculer() {

    @Scheduled(fixedDelay = 1000) // scheduler 끝나는 시간 기준으로 1000 간격으로 실행
    public void scheduleFixedDelayTask() {
        System.out.println(
        "Fixed delay task - " + System.currentTimeMillis() / 1000);
    }

    @Scheduled(fixedRate = 1000) // scheduler 시작하는 시간 기준으로 1000 간격으로 실행
    public void scheduleFixedRateTask() {
        System.out.println(
        "Fixed rate task - " + System.currentTimeMillis() / 1000);
    }

    @Scheduled(cron = "0 15 10 15 * ?") // cron에 따라 실행
    public void scheduleTaskUsingCronExpression() {
        long now = System.currentTimeMillis() / 1000;
        System.out.println(
        "schedule tasks using cron jobs - " + now);
    }

    @Scheduled(cron = "0 15 10 15 * ?", zone = "Europe/Paris") // cron에 TimeZone 설정 추가
}

Quartz

  • Java 내부의 별도 Thread 지정하여 수행 가능
  • Scheduler 간의 Clustering 지원
  • Scheduling 실패 후 처리 방법 등을 정의 가능(Misfire Instruction)
  • JVM 종료 이벤트 캐치 기능 제공
  • 다양한 Plugin 제공
public class DumbJob implements Job {
	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("DumbJob is executing.");
	}

}

JobDetail jobDetail = new JobDetail("myJob",// Job 명
																		sched.DEFAULT_GROUP, // Job 그룹명('null' 값인 경우 DEFAULT_GROUP 으로 정의됨)
																		DumbJob.class); // 실행할 Job 클래스
 

Trigger trigger = TriggerUtils.makeDailyTrigger(8, 30); // 매일 08시 30분 실행
trigger.setStartTime(new Date()); // 즉시 시작
trigger.setName("myTrigger");
sched.scheduleJob(jobDetail, trigger);

Reference

https://pray-for-dev.tistory.com/45

'Framework > Spring-Quartz' 카테고리의 다른 글

(5) Quartz Trigger  (0) 2022.11.24
(4) Spring Quartz Sample  (0) 2022.11.24
(3) Quartz DB Schema  (0) 2022.11.24
(1) Quartz 정의  (0) 2022.11.24