Pages

2014년 2월 18일 화요일

[SPRING] Spring mvc에서 Quartz 적용하기 - (1)


1. 관련 라이브러리
 - 갑자기 라이브러리가 많이 필요해졌다. 대충 정리하면 아래와 같은데, 알아서 구해보시길. ^^;
 - spring 2.5.6 (http://www.springsource.org/download)
 - iBatis 2.3.4 (http://ibatis.apache.org/javadownloads.cgi)
 - commons-dbcp 1.2.2 (http://commons.apache.org/dbcp/downloads.html)
 - commons-pool 1.4 (http://commons.apache.org/pool/downloads.html)
 - commons-collections(http://commons.apache.org/downloads/download_collections.cgi)
 - JDBC Driver (http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html)



2. Quartz Scheduler(http://www.opensymphony.com/quartz/
 - 원래 의도는 Timer를 사용해서 간단한 스케줄러 기능을 구현하려고 했지만, 멋(?)을 위해 Quartz Scheduler를 사용하도록 하겠다.
 - Quartz는 다양한 시간간격에 의한 수행과 사용자 정의에 의한 수행을 모두 구현할 수 있다.
 - spring에서는 quartz 연동 클래스를 제공해 준다. 
 - 발동(?) 클래스
   + org.springframework.scheduling.quartz.SimpleTriggerBean
    : 반복 시간을 지정할수 있다.
1<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
2    <property name="jobDetail" ref="jobDetail" />
3    <property name="startDelay" value="30000" />
4    <property name="repeatInterval" value="30000" />
5</bean>

   + org.springframework.scheduling.quartz.CronTriggerBean
     : 다양한 시간간격을 지정할수 있다. (매일, 매주, 심시어 요일별로 지정할 수 있다)
       표현식 -> http://quartz.sourceforge.net/javadoc/org/quartz/CronTrigger.html
1<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
2    <property name="jobDetail" ref="jobDetail" />
3    <property name="cronExpression" value="0/30 * * * * ?" />
4</bean>

  - 실행시킬 작업(Job)을 정의하는 클래스
    + org.springframework.scheduling.quartz.JobDetailBean
      : org.springframework.scheduling.quartz.QuartzJobBean을 상속받아 executeInternal(JobExecutionContext) 메소드를 구현하면 된다.
1<bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
2    <property name="jobClass" value="kr.kangwoo.postman.XxxJob" />
3    <property name="jobDataAsMap">
4        <map>
5            <entry key="timeout" value="30000" />
6        </map>
7    </property>
8</bean>

    + org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
      : 지정한 Bean의 대상 메소드를 실행시켜준다.
1<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
2    <property name="targetObject" ref="postManJob" />
3    <property name="targetMethod" value="run" />
4    <property name="concurrent" value="false" /> <!-- job이 동시에 여러개 실행될지 여부를 지정하는것이다. -->
5</bean>
  
   - 스케줄러를 지정해 주면, spring이 초기화되면서 자동으로 작동을 한다. triggers란 이름의 속성에 작동시킬 Trigger들을 넣어주면 된다.
1<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
2    <property name="triggers">
3        <list>
4            <ref local="simpleTrigger"/>
5            <ref local="cronTrigger"/>
6        </list>
7    </property>
8</bean>

댓글 없음:

댓글 쓰기