티스토리 뷰



 

 

Java 에서 스케쥴러 사용 시 많이 쓰는 Quartz 에 대한 내용입니다.

Quartz 에서 사용하는 Trigger 는 SimpleTrigger 와 CronTrigger 가 있습니다.

이 글 에서는 SimpleTrigger 는 간략히 설명만 하고 CronTrigger 의 설정 값에 대해 알아보도록 하겠습니다.

   

   

-- SimpleTrigger

 

Simpletrigger 의 특징은 interval, delay, repeat times 등을 설정 할 수 있으며 

Job 을 특정 시간에 실행되게 하거나 특정 기간에 반복 수행하도록 할 시에 사용됩니다.

org.quartz.SimpleTrigger 로 Trigger 를 상속 받으면서 아래와 같은 속성을 지니고 있습니다.

...

public SimpleTrigger(String name, String group, Date startTime, Date endTime, int repeatCount, long repeatInterval)

{

  super(name, group);

    

  setStartTime(startTime);

  setEndTime(endTime);

  setRepeatCount(repeatCount);

  setRepeatInterval(repeatInterval);

}

...

   

String name : Job 이름

String group : Group 이름

Date startTime : Trigger 시작시간

Date endTime : Trigger 종료 시간

int repeatCount : 수행 횟수

long repeatInterval : 수행 간격

   

예제 )

Scheduler scheduler = new StdSchedulerFactory().getScheduler();

// start() 상태의 Trigger 만 발동 되므로 start()시켜준다.

scheduler.start();

// Create JobDetail Instance

JobDetail jobDetail = new JobDetail("TestScheduler", CustomUser.class);

// Create Trigger Instance

SimpleTrigger trigger = new SimpleTrigger("TestTrigger");

// 옵션 설정

// 반복 횟수

trigger.setRepeatCount(10);

// 수행 간격

trigger.setRepeatInterval(1000);

sched.scheduleJob(jobDetail, trigger);

   

   

   

-- CronTrigger

   

CronTrigger 는 공백으로 굽누되는 6~7 자리의 문자로 수행시간이 설정됩니다.

   

필드명

필수여부

허용 특수문자 

초(Second)

Y

 0~59 

, - * / 

분(Minute)

Y

0~59

, - * /

시(Hour)

Y

0~23

, - * /

일(Day)

Y

1~31

, - * / ? L W

월(Month)

Y

1~12 or JAN~DEC

, - * /

요일(Week)

Y

1~7 or SUN~SAT

, - * / ? L #

년(Year)

N

null, 1979~2099

, - * /

 

 

- 허용 특수문자의 의미

  • * : 모든 값. 0초~59초.
  • ? : 특정 값을 정하지 않은 것. 일과 요일에서 사용가능하며 일에 사용할 경우 어떤 요일도 상관 없는 것을 의미.
  • - : 범위를 의미. 0-10이면 0부터 10까지. (10 포함)
  • , : 여러 개의 값을 함께 쓸 때 사용. 0-10,20-30은 0부터 10까지, 20부터 30까지.
  • / : 증분을 의미. 0/10 일 경우 10초 마다. (0, 10, 20, 30, 40, 50)
  • L : 마지막을 뜻함. 날짜에 사용할 경우 월의 마지막 날을 의미.
  • W : 주중를 의미. 날짜와 함께 쓰면 그 날이 주중인 날을 의미. 
  • # : n번째를 의미. 그 달의 몇 번째 무슨 요일을 설정할 때 사용. (2#3 은 3번째 월요일)

   

   

위와 같으며 설정은 아래와 같습니다.

* 아래의 내용은 검색을 통해 발췌한 내용 입니다.

   

설정

의미 

 0 0 12 * * ?

 매일 12시(정오)

 0 15 10 ? * *

 매일 오전 10시 15분

 0 15 10 * * ?

 매일 오전 10시 15분

 0 15 10 * * ? *

 매일 오전 10시 15분

 0 15 10 * * ? 2005

 2005년에 매일 아침 10시 15분

 0 * 14 * * ?

 매일 오후 2시 0분 ~ 59분

 0 0/5 14 * * ?

 매일 오후 2시부터 2시 55분까지 5분마다

 0 0/5 14,18 * * ?

 매일 오후 2시부터 2시 55분까지 5분마다, 6시부터 6시 55분까지 5분마다

 0 0-5 14 * * ?

 매일 오후 2시부터 2시 5분까지 매분

 0 10,44 14 ? 3 WED

 매년 3월의 수요일마다 오후 2시 10분과 2시 44분

 0 15 10 ? * MON-FRI

 월요일부터 금요일까지 오전 10시 15분

 0 15 10 15 * ?

 매달 15일 오전 10시 15분

 0 15 10 L * ?

 매달 마지막 날 오전 10시 15분

 0 15 10 ? * 6L

 매달 마지막 금요일 오전 10시 15분

 0 15 10 ? * 6L 2002-2005

 2002년부터 2005년까지 매달 마지막 금요일 오전 10시 15분

 0 15 10 ? * 6#3

 매달 3번째 금요일 오전 10시 15분

 0 0 12 1/5 * ?

 매달 첫날부터 5일마다 12시(정오)

 0 11 11 11 11 ?

 매년 11월 11일 오전 11시 11분

   

   

* 아래의 내용은 검색을 통해 발췌한 내용 입니다.

   

* 참고 사항

  • 날짜와 요일에서 ?를 사용할 수 있는데 서로 배타적입니다. 즉, 날짜에 ?를 쓰면 요일에 사용할 수 없고, 요일에 ?를 쓰면 날짜에는 사용할 수 없습니다. 이것은 매달 x일이 y요일인 경우가 거의 발생할 수 없기 때문입니다.
  • 범위(-)를 사용할 때 마지막 값을 포함한다는 것에 주의해야합니다. 특정 시간을 제외할 경우, 예를 들어 매일 6시를 제외할 경우에 0-5,7-23으로 표현해야합니다. 0-6,7-23으로 표현하면 6시까지 포함됩니다. 시간만 표현할 때는 헷갈리지 않는데 분과 같이 사용할 때 혼동하기 쉽습니다. 위의 예에 이어서 매 10분마다 실행한다고 할 때, 0 0/10 0-5,7-23 * * ? 로 표현합니다.
  • 날짜에 L과 W를 함께 사용(LW)하면 "매월 마지막 평일(weekday)"을 의미합니다.
  • 요일에 x#5를 사용하면 5번째 주에 x요일인 날을 의미합니다.
  • 국내에서는 특별히 고려하지 않아도 되지만 해외 시간을 이용하는 경우에는 썸머타임(daylight saving)을 고려해야합니다. 자정부터 새벽 1시까지의 시간은 썸머타임 시행시 건너뛰거나 반복해서 실행 될 가능성이 있습니다. 

   


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함