1. 샘플 프로젝트 생성
STS 에서 [File] - [New] - [Spring Template Project] 메뉴를 클릭한 후 Spring MVC Project를 이용해 샘플 프로젝트를 생성한다.
2. pom.xml 파일 수정
quartz 관련 모듈을 이용하기 위해서 pom.xml 파일에 관련 라이브러리들 넣는다.
spring-tx, quartz, commons-collections, javax.transaction 4개 넣어줘야한다.
< dependency > < groupId >org.springframework</ groupId > < artifactId >spring-tx</ artifactId > < version >${org.springframework-version}</ version > </ dependency > <!-- Quartz framework and dependencies --> < dependency > < groupId >opensymphony</ groupId > < artifactId >quartz</ artifactId > < version >1.6.3</ version > < scope >compile</ scope > </ dependency > <!-- Quartz 1.6.0 depends on commons collections --> < dependency > < groupId >commons-collections</ groupId > < artifactId >commons-collections</ artifactId > < version >3.1</ version > < scope >runtime</ scope > </ dependency > <!-- Quartz 1.6.0 requires JTA in non J2EE environments --> < dependency > < groupId >javax.transaction</ groupId > < artifactId >jta</ artifactId > < version >1.1</ version > < scope >runtime</ scope > </ dependency > |
3. 주기적으로 실행 될 Bean 생성
2개의 Bean을 만든다.
CronQuartz1.java
package com.mungchung.sample; import java.text.SimpleDateFormat; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class CronQuartz1 extends QuartzJobBean{ @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { long time = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd HH:mm:ss" ); System.out.println( "Cron trigger 1 (5 second): current time = " + sdf.format(time)); } } |
CronQuartz2.java
package com.mungchung.sample; import java.text.SimpleDateFormat; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class CronQuartz2 extends QuartzJobBean{ @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { long time = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd HH:mm:ss" ); System.out.println( "Cron trigger 2 (1 minute): current time = " + sdf.format(time)); } } |
4. quartz Bean과 위에서 생성한 Bean 연동
2개의 Bean이 각각 다른 시간차이로 실행되도록 설정해줄것이다.
CronQuartz1.java - 5초마다 실행
CronQuartz2.java - 1분마다 실행
/src/main/webapp/WEB-INF/spring/root-context.xml
<!-- 1. Cron 대상이 되는 클래스 정의 --> < bean id = "cronQuartz1" class = "org.springframework.scheduling.quartz.JobDetailBean" > < property name = "jobClass" value = "com.mungchung.sample.CronQuartz1" /> </ bean > < bean id = "cronQuartz2" class = "org.springframework.scheduling.quartz.JobDetailBean" > < property name = "jobClass" value = "com.mungchung.sample.CronQuartz2" /> </ bean > <!-- 2. Cron 시간 설정 --> < bean id = "cronTrigger1" class = "org.springframework.scheduling.quartz.CronTriggerBean" > < property name = "jobDetail" ref = "cronQuartz1" /> < property name = "cronExpression" value = "0/5 * * * * ?" /> </ bean > < bean id = "cronTrigger2" class = "org.springframework.scheduling.quartz.CronTriggerBean" > < property name = "jobDetail" ref = "cronQuartz2" /> < property name = "cronExpression" value = "0 0/1 * * * ?" /> </ bean > <!-- 3. Cron 실행 --> < bean class = "org.springframework.scheduling.quartz.SchedulerFactoryBean" > < property name = "triggers" > < list > < ref bean = "cronTrigger1" /> < ref bean = "cronTrigger2" /> </ list > </ property > < property name = "quartzProperties" > < props > < prop key = "org.quartz.threadPool.class" >org.quartz.simpl.SimpleThreadPool</ prop > < prop key = "org.quartz.threadPool.threadCount" >3</ 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 > |
Cron Expression
총 7개의 필드 있고 마지막 필드(년도)는 생략 가능하다
필드이름 | 허용 값 |
초(Seconds) | 0 ~ 59 |
분(Minutes) | 0 ~ 59 |
시간(Hours) | 0 ~ 23 |
달의 날짜(Day-of-month) | 1 ~ 31 |
달(Month) | 1 ~ 12 or JAN ~ DEC |
주의 날짜(Day-of-week) | 1 ~ 7 or SUN-SAT |
년도(Year) (선택가능) | 빈값, 1970 ~ 2099 |
Cron Expression의 특수문자
Expression | 설명 | 예시 |
* | 모든 수를 나타냄 | |
- | 값의 사이를 의미 | * 10-13 * * * * 10,11,12,13분에 동작함 |
, | 특정값 지칭 | * 10,11,13 * * * * 10,11,13분에 동작함 |
/ | 값의 증가를 표현 | * 0/5 * * * * 0분부터 시작해서 5분마다 동작 |
? | 특별한 값이 없음을 나타냄(day-of-month, day-of-week 필드만 사용) | |
L | 마지막 날을 나타냄(day-of-month, day-of-week 필드만 사용) |
6. 실행결과
실행결과를 보면 하나는 5초마다, 다른 하나는 1분마다 Bean이 실행되고 있음을 알수 있다.
출처 :
http://www.mungchung.com/xe/spring/21303
'Blogger 이사' 카테고리의 다른 글
[JavaScript] 로그인 아이디 저장(세션) (0) | 2016.04.04 |
---|---|
[CSS] popup window with dimmed background (0) | 2016.04.04 |
[Toad] Table Space 및 사용자 계정 만들기 (0) | 2016.04.04 |
[css] favicon, apple-touch-icon 설정 (0) | 2016.04.04 |
[Spring] Spring Tool Suite(STS) + MySQL + MyBatis (0) | 2016.04.04 |