2007년 2월 27일 화요일

Spring과 Timer 사이의 연동으로 인한 스케쥴링

스케쥴링을 하기 위하여서는 아래 몇가지 개념부터 먼저 잡고 넘어가야한다.
job : 이것은 독립적인 작업단위로서 job은 지정된 단위간격을 주기로 실행이 되여진다.
trigger : job의 실행을 하기위한 조건을 명시한다. 이런 조건은 단순히 고정된 시간으로 구성이 되여질수 도 있고 아니면 복잡한 데이타로 구성이 되여질수도 있다.
scheduler : trigger의 집합으로써 직책은 전체 스케쥴링 시스템을 관리하는것이다.

Spring은 여러가지 보조적 클래스를 이용하여 Timer와 연동하여 사용되여진다.
ScheduledTimerTask와 TimerTask가 그 가장 대표적인 보조클래스이다.
또한 TimerFactoryBean을 통하여 Spring은 자동적으로 지정된 trigger한테 새로운 공유된 Timer 인스턴스를 생성해주고 Timer는 이런 Trigger 를 이용하여 해당 job을 실행해준다.

ApplicationContextTimer.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <!-- 주입시킬 클래스를 선언적 방식으로 명시하였다. -->

  <bean id="generatorJob"

        class="com.xxx.nnserp.spring.SmsTransferLegacy">

  </bean>

 

  <!-- MethodInvokingTimerTaskFactoryBean 사용하여

              generatorJob 동적 프록시를 생성하였으며 TimerTask 특성을 가지게 하였다. -->

  <bean id="generatorJobProxy"

        class="org.springframework.scheduling.timer.
               MethodInvokingTimerTaskFactoryBean"
>

      <property name="targetObject">

          <ref local="generatorJob"/>

      </property>

      <property name="targetMethod">

          <value>send</value>

      </property>

      <property name="arguments">

          <value>xxx</value>

      </property>

  </bean>

 

  <!-- 실제 타이머태스크가 작동할 시간단위를 설정해준다. -->

  <bean id="repeatingTrigger"

    class="org.springframework.scheduling.timer.ScheduledTimerTask">

    <!-- 시동후 20초후 작업을 실행한다. -->

    <property name="delay">

      <value>20000</value>

    </property>

    <!-- 5초마다 작업을 실행한다. -->

    <property name="period">

      <value>5000</value>

    </property>

    <!-- 위에서 선언한 generatorJobProxy timerTask 주입시킨다. -->

    <property name="timerTask">

      <ref local="generatorJobProxy" />

    </property>

  </bean>

 

  <!-- 스케쥴러속성에 타임태스크와 반복설정관련 트리거를 추가해준다. -->

  <bean id="scheduler"

    class="org.springframework.scheduling.timer.TimerFactoryBean">

    <property name="scheduledTimerTasks">

      <list>

        <ref local="repeatingTrigger" />

      </list>

    </property>

  </bean>

</beans>

 
ApplicationContextTimer.xml 는 Spring의 ApplicationContext에 대한 설정파일로서 이 예제에서는 실제 타이머 어떻게 작동할것인지에 대한 룰들을 정의하고 또한 어느 클래스에 대하여 스케쥴링을 할것인지를 설정해준다.

SmsTransferLegacy.java

public class SmsTransferLegacy {

       public void send(String args)

       {

             System.out.println(LibDatetime.getTimeString() + " 시각에 " + args +

                                                                                                          " SMS 발송!");

       }

 

}


SmsTransferLegacy.java 클래스는 사실상 주기적으로 실행이 되여져야 할 클래스로서 이 예제에서는 단순히 실행이 되여질때마다 타임스템프를 출력시키는것으로 구현했다.

댓글 없음:

댓글 쓰기