[JAVA] quartz 를 이용한 스케쥴러 구현

2018. 6. 18. 14:31· Programing/JAVA
반응형
SMALL

Java에서 스케줄링을 할 때 Quartz를 많이 사용합니다. Quartz에서 사용하는 Trigger는 SimpleTrigger와 CronTrigger가 있는데요. 

간단하게 특징을 보면 다음과 같습니다.


SimpleTrigger : 간단하며 interval, delay, repeat times 등을 설정할 수 있습니다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!-- 하나.주기적으로 실행될 클래스 설정 -->
    <!-- property name은 jobClass로 fix, value는 사용자가 작성한 class 파일 위치 -->
    <bean id="simpleQuartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="net.test.quartz.SimpleQuartzJob"/>
    </bean>
 
    <!-- 둘.스케줄러의 interval time 설정 -->
    <!-- 쿼츠에는 아래와 같이 몇초에 한번씩 돌게 하는 Simple type 과 -->
    <!-- 무슨 요일 몇시에 한번씩 돌게 하는 날짜로 지정하는 Cron type 이 있다. -->
    <!-- 현재는 Simple type으로 세팅 -->
    <!-- jobDetail은 위에서 설정한 실제 동작할 클래스 id를 적어준다 -->
    <!-- startDelay는 서버 시작후 몇초 뒤에 시작할지 세팅(ms 단위)  -->
    <!-- repeatInterval은 몇 초에 한번씩 실행될 건지 세팅(ms 단위: 현재 1초) -->
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="simpleQuartzJob"/>
        <property name="startDelay" value="1000"/>
        <property name="repeatInterval" value="1000"/>
    </bean>
    <!--셋. 실제 동작하게끔 설정 -->
    <!--ref bean은 위에서 설정한 interval time 아이디를 넣어주면 됨  -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
        <!-- Quartz 실행시 세팅 -->
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                <prop key="org.quartz.threadPool.threadCount">5</prop>
                <prop key="org.quartz.threadPool.threadPriority">4</prop>
                <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
                <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
            </props>
        </property>
    </bean>
</beans>
 
Colored by Color Scripter
cs


CronTrigger : Linux에서 사용하는 cron과 같은 표현(expression)을 사용하며, 특정 시간에 작동하도록 설정할 수 있습니다.


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
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!--하나. 주기적으로 실행될 클래스 설정 -->
    <bean id="cronQuartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="net.test.quartz.CronQuartzJob"/>
    </bean>
     
    <!--둘. 스케줄러의 interval time 설정-->
    <!--cronExpression을 통해서 스캐줄러 주기를 설정한다. -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="cronQuartzJob"/>
        <property name="cronExpression" value="0/1 * * * * ?"/>
    </bean>
     
    <!--셋. 실제 동작하게끔 설정 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
            </list>
        </property>
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                <prop key="org.quartz.threadPool.threadCount">5</prop>
                <prop key="org.quartz.threadPool.threadPriority">4</prop>
                <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
                <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
            </props>
        </property>
    </bean>
</beans>
Colored by Color Scripter
cs


Field 설명

Cron expression은 공백(space)으로 구분된 6~7개의 문자(숫자, 영문자, 기호)를 포함합니다.


필드 명 

 필수

 허용 값

 Special characters

 초(seconds)

 Yes

 0-59

 , - * /

 분(minutes)

 Yes

 0-59

 , - * /

 시(hours)

 Yes

 0-23

 , - * /

 날짜(day of month)

 Yes

 1-31

 , - * / ? L W

 월(month)

 Yes

 1-12 or JAN-DEC

 , - * /

 요일(day of week)

 Yes

 1-7 or SUN-SAT

 , - * / ? L #

 년(year)

 No

 empty, 1979-2099

 , - * /



Special Characters 설명


* : 모든 값을 의미합니다. 만약 초에 사용하면 0초~59초까지를 의미합니다.

? : 특정 값을 정하지 않은 것입니다. 일과 요일에서 사용가능한데 일에 사용할 경우 어떤 요일도 상관 없는 것 입니다.

- : 범위를 의미합니다. 예를 들어 0-10이면 0부터 10까지입니다. 여기서 주의할 것은 마지막 값인 10이 포함된다는 것입니다.

, : 값을 추가할 때 사용합니다. 0-10,20-30은 0부터 10까지, 그리고 20부터 30까지를 의미합니다.

/ : 증분을 의미합니다. 예를 들어 초에 0/15를 사용하면 15초마다(0, 15, 30, 45) triggering합니다.

L : 마지막을 뜻합니다. 날짜에 사용하면 월의 마지막 날을 의미합니다. 31, 30 또는 28(윤달에는 29)일입니다.

W : 주중(weekday)를 의미합니다. 날짜와 같이 쓰면 그 날짜가 주중인 날을 의미합니다. 

# : n번째를 의미합니다. 그 달의 몇번째 무슨 요일을 설정할 때 사용합니다. 예를 들어 3번째 월요일은 "2#3"으로 설정합니다.

 


Example


여기서 사용한 예는 Quartz 사이트의 CronTrigger Tutorial에서 차용했습니다.


Expression                         Meaning

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분



참고 


[1] http://krespo.net/96

[2] http://devfun.tistory.com/1

반응형
LIST

'Programing > JAVA' 카테고리의 다른 글

[java] Map을 로그에 출력하는 방법  (11) 2022.02.11
[ Java ] 로컬 ip 및 포트 확인방법  (0) 2021.11.04
[ Java ] 소켓통신 예제  (1) 2021.10.14
[ Java ] 파일생성  (0) 2021.10.12
[ JAVA ] 서버 IP 가져오는 방법  (1) 2021.03.05
'Programing/JAVA' 카테고리의 다른 글
  • [ Java ] 로컬 ip 및 포트 확인방법
  • [ Java ] 소켓통신 예제
  • [ Java ] 파일생성
  • [ JAVA ] 서버 IP 가져오는 방법
- 광속거북이 -
- 광속거북이 -
IT관련 일하면서 공부 및 일상 에 관한 내용들을 기록하기 위한 블로그 입니다.
누리IT관련 일하면서 공부 및 일상 에 관한 내용들을 기록하기 위한 블로그 입니다.
- 광속거북이 -
누리
- 광속거북이 -
전체
오늘
어제
  • 카테고리 (456)
    • 구글문서 (4)
    • 설치방법들 (3)
    • FrameWork (73)
      • Django (6)
      • Python (32)
      • AngularJS (13)
      • spring (21)
    • Programing (61)
      • JAVA (11)
      • etc... (2)
      • 오류 해결 (29)
      • Algorithm (5)
    • Front-End (25)
      • CSS (3)
      • html (6)
      • javascript (10)
      • vueJS (5)
    • Back-End (5)
      • 리눅스 (12)
      • PostgreSQL (14)
      • MySQL (2)
      • Shell (1)
      • docker (1)
      • GIT (1)
    • Util (9)
      • BIRT (2)
      • JMeter (3)
      • MobaXterm Personal (1)
      • ClipReport (2)
    • 이클립스 설정 (10)
      • SVN (1)
    • 업무중 기록해둘 것들... (1)
    • 영화 (8)
    • etc.. (198)
      • 여행 (25)
      • 문화생활 (3)
      • tistory (3)
      • 글, 생각 (4)
      • 먹을 곳 (29)
      • issue (4)
      • 결혼 (1)
      • 가족여행기록 (1)
      • Tip (51)
      • 강아지 (5)
      • 일기 (0)
      • 게임 (3)
      • 주식 (7)
      • 코로나19 (7)
      • 맥북 (5)
    • 비공개 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 설치
  • 맛집
  • tomcat
  • 리눅스
  • 설정
  • 인텔리제이
  • IntelliJ
  • 백준
  • VSCode
  • Java
  • 포켓몬고
  • 제주도
  • PostgreSQL
  • 삼성증권
  • 해지
  • 윈도우10
  • 합정
  • 이클립스
  • 연천
  • 카페

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
- 광속거북이 -
[JAVA] quartz 를 이용한 스케쥴러 구현
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.