티스토리 뷰

Quartz scheduler?

거의 모든 Java 응용 프로그램에 통합 할 수 있는 풍부한 기능의 오픈 소스 작업 스케쥴 라이브러리이다. 

보통 배치작업이나 변경된 정보를 주기적으로 reload 해주기 위해 사용한다. 

 

 

대략적인 구조는 이러하다. 스케쥴러의 특성상 언제(Trigger)와 무엇을(Job Detail) 로 구성되어 있다. 


일단 Quartz를 사용하기 위해서는 dependency 추가가 필요하다. 

 

pom.xml

<dependency>  
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId> 
    <version>2.3.2</version> 
</dependency>  

 

추가가 되었다면 샘플을 작성해 보도록 하자. 

 

 

Quartz Scheduler Sample

<bean id="sampleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"
p:jobClass="sample.job.SampleJob" p:durability="true" /> 

<bean id="sampleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
p:jobDetail-ref="sampleJob" p:startDelay="20000" p:repeatInterval="3000000" /> 

<bean id="sampleScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="simpleTrigger" />
        </list>
    </property>
</bean>

 

위의 그림처럼 Scheduler는 Trigger를, Trigger는 Job을 가지고 있는 구조이다. sampleJob이라는것은 sampleTrigger에 끼워져 작동을 하고 이 sampleTrigger는 5분(300000ms)에 한번씩 동작을 한다. 즉 5분에 한번씩 sampleJob이 동작하는 Schedule을 구성했다. 이렇게 interval 단위로 스케쥴러를 작동시킬 수 있고 Cron Expression에 의해 동작시킬수도 있다. 

 

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="sampleJob" />
     <property name="cronExpression" value="0/5 * * * * ?" />
</bean>

 

이런식으로 Trigger를 구성할때 CronTriggerBean을 활용할 수 있다. 

 

이제는 위에 나온 sampleJob을 구현해 보도록 하자. 

 

SampleJob.java

@Slf4j
public class SampleJob extends QuartzJobBean {

    protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
        log.debug("Quarts Job Start now.");		
        //실제 동작시킬 코드를 입력
        log.debug("Quarts Job End now.");
    }
}

 

Quartz Job을 만들때는 QuartzJobBean 을 상속받아서 executeInternal() 을 오버라이딩하면 된다. 이 메소드 내에 주기적으로 동작시키고 싶은 일을 구현하면 된다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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