현재까진 Quartz 2.0 이 나왔으나
관련 포럼에서는 Quartz 2.0 이 Spring 3.0 에 문제를 발생시킨다 한다.
Quartz 1.8 은 문제없이 잘 돌아간다.
간단히 Quartz 는 Java Job Scheduler 라고 보면된다.
Quartz 1.8.5 : http://www.quartz-scheduler.org/download/download-catalog.html
다운받은 Quartz 를 압축해제후 Quartz-1.8.5.jar 파일을 해당 WAS Library 에 Import 한다
두가지 요소의 Class 를 생성할것이다.
첫번째론 작업이 실행될 Class(JobTask)
두번째는 위의 Class 를 스케쥴러를 통해 실행하게 끔 해주는 JobBean 을 만들 것이다. (JobScheduler)
우선 심플하게 JobTask Class 를 보면
그 다음 위의 클래스를 스케쥴러에 의해 실행되게 해주는 Class 를 만든다.
이제 기본 Class 는 다만들었고 Container 에서 인식할 수있게 Servlet 에서 Bean 정의를 해준다.
1. 위의 Class 들의 Bean 정의
2. JobDetailBean
3. Quartz Trigger 정의
4. SchedulerFactoryBean 에 설정한 Bean 주입
우선 JobTask Bean을 정의한다.
다음은 Spring에서 Quartz 연동을 제공하는 JobDetailBean 을 정의한다.
기본 Property 는 위에서만든 JobTask 정보 와스케쥴러를 통해서 실행되게 할 JobScheduler 이다.
다음은 Trigger
Quartz 에서 제공하는 Trigger 는 2가지이다
1. SimpleTrigger : Job 시작시간, 종료시간, 실행간격 등 간단한 설정으로 정의
2. CronTrigger : Unix Cron Expression 을 이용하여 SimpleTrigger 보다 더 정교하게 Job 시간을 정의 할 수있다.
CronTrigger 를 이용하여 매일 5초마다 JobTask 가 실행되게 Trigger 를 정의하면 아래와 같다.
마지막으로 위의 JobDetailBean 과 TriggerBean 을 Spring 에서 제공하는 SchedulerFactoryBean 에 Injection 시킨다.
이제 Spring container 를 가동시켜보면.
아래와 같이 5초마다 JobTask 가 실행되는걸 확인 할 수 있다.
관련 포럼에서는 Quartz 2.0 이 Spring 3.0 에 문제를 발생시킨다 한다.
Quartz 1.8 은 문제없이 잘 돌아간다.
간단히 Quartz 는 Java Job Scheduler 라고 보면된다.
Quartz 1.8.5 : http://www.quartz-scheduler.org/download/download-catalog.html
다운받은 Quartz 를 압축해제후 Quartz-1.8.5.jar 파일을 해당 WAS Library 에 Import 한다
두가지 요소의 Class 를 생성할것이다.
첫번째론 작업이 실행될 Class(JobTask)
두번째는 위의 Class 를 스케쥴러를 통해 실행하게 끔 해주는 JobBean 을 만들 것이다. (JobScheduler)
우선 심플하게 JobTask Class 를 보면
| /** JobTask.java**/ public class JobTask { public void test(){ System.out.println("Task 실행!"); } } |
그 다음 위의 클래스를 스케쥴러에 의해 실행되게 해주는 Class 를 만든다.
| /** JobScheduler.java**/ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class JobScheduler extends QuartzJobBean{ private JobTask jobTask; public void setJobTask(JobTask jobTask) { this.jobTask = jobTask; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { jobTask.test(); } } |
이제 기본 Class 는 다만들었고 Container 에서 인식할 수있게 Servlet 에서 Bean 정의를 해준다.
1. 위의 Class 들의 Bean 정의
2. JobDetailBean
3. Quartz Trigger 정의
4. SchedulerFactoryBean 에 설정한 Bean 주입
우선 JobTask Bean을 정의한다.
<bean id="JobTask" class="com.apro.service.JobTask"/> |
다음은 Spring에서 Quartz 연동을 제공하는 JobDetailBean 을 정의한다.
기본 Property 는 위에서만든 JobTask 정보 와스케쥴러를 통해서 실행되게 할 JobScheduler 이다.
<bean name="JobProcess" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.apro.service.JobScheduler"/> <property name="jobDataAsMap"> <map> <entry key="JobTask" value-ref="JobTask"></entry> </map> </property> </bean> |
다음은 Trigger
Quartz 에서 제공하는 Trigger 는 2가지이다
1. SimpleTrigger : Job 시작시간, 종료시간, 실행간격 등 간단한 설정으로 정의
2. CronTrigger : Unix Cron Expression 을 이용하여 SimpleTrigger 보다 더 정교하게 Job 시간을 정의 할 수있다.
CronTrigger 를 이용하여 매일 5초마다 JobTask 가 실행되게 Trigger 를 정의하면 아래와 같다.
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="JobProcess"/> <property name="cronExpression" value="0/5 * * * * ?"/> </bean> |
마지막으로 위의 JobDetailBean 과 TriggerBean 을 Spring 에서 제공하는 SchedulerFactoryBean 에 Injection 시킨다.
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="JobProcess"/> </list> </property> <property name="triggers"> <list> <ref bean="cronTrigger"/> </list> </property> </bean> |
이제 Spring container 를 가동시켜보면.
아래와 같이 5초마다 JobTask 가 실행되는걸 확인 할 수 있다.