Programming/JAVA

Spring Scheduler 등록 방식

Edward. K 2008. 1. 4. 16:12
반응형

Spring Scheduler 등록 방식
Spring 스케쥴러 분석을 위해 만들어둔 샘플 코드.
꼭 한번은 직접 코딩을 해주세용..




Cron Scheduler 실생할 경우 필요한 jar 파일  ( lib 폴더에 추가 )
    >  quartz-1.6.0.jar

IOC 방식   (Injection Of Control)
    > instance삽입해서 사용하는 방식.  property로 bean을 추가해두고 사용하는 방식




web.xml  파일에   scheduler.xml 등록


scheduler.xml

<beans>

        <bean id="schedulerDemon" class="package.SchedulerDemon">
            <!-- 해당 class 에서  import 되는 객체들 선언 -->
            <property name="transactionManager">
                <!-- 다른 파일<ref bean="transactionManager" />-->
                <ref local="transactionManager" /><!-- 동일 파일-->
            </property>
            <property name="propNameA">
                <ref bean="propBeabnameA" />
            </property>
            <property name="propNameB">
                <ref bean="propBeabnameB" />
            </property>
        </bean>
            
        <bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject"><ref local="schedulerDemon"/></property>
            <property name="targetMethod"><value>doSchedulerDemon</value></property>
            <property name="concurrent"><value>false</value></property>
        </bean>

        <bean id="schedulerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
            <property name="jobDetail">
                <ref bean="schedulerJobDetail"/>
            </property>
            <property name="startDelay">
                <value>10000</value>
            </property>
            <property name="repeatInterval">
                <value>600000</value>
            </property>
        </bean>

        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource">
                <ref local="dataSourceUser"/>
            </property>
        </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="schedulerTrigger"/>
                <ref local="schedulerCronTrigger"/>
            </list>
        </property>
    </bean>

    <bean id="dataSourceUser" class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close">
        <property name="driverClassName">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@(description=(address_list=(address=(host=111.222.333.444)(protocol=tcp)(port=ORACLEportNo))(address=(host=222.333.444.555)(protocol=tcp)(port=ORACLEportNo))(load_balance=yes)(failover=yes))(connect_data=(service_name=DB_NAME)))</value>  
        </property>
        <property name="username">
            <value>로그인ID</value>
        </property>
        <property name="password">
         <value>로그인PASS</value>
        </property>
    </bean>


    <bean id="ipeJdbcDaoSupportUser" abstract="true" class="kr.co.digiwave.webclient.dao.IpeJdbcDaoSupport">
        <property name="dataSource">
            <ref local="dataSourceUser"/>
        </property>
        <property name="messageSourceAccessor">
            <ref bean="messageSourceAccessor"/>
        </property>
    </bean>

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>/경로/파일명1</value>
                <value>/경로/파일명2</value>
                <value>/경로/파일명3</value>
            </list>
        </property>
        <property name="cacheSeconds" value="5"/>
    </bean>

    <bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
        <constructor-arg>
            <ref local="messageSource" />
        </constructor-arg>
    </bean>

<!----------------------------------------------------------->
/*     CronTriggerBean  사용     */
    <bean id="schedulerCronClass" class="package.SchedulerCronClass">
        <!-- 해당 class 에서  import 되는 객체들 선언 -->
        <property name="transactionManager">
            <!-- 다른 파일<ref bean="transactionManager" />-->
            <ref local="transactionManager" /><!-- 동일 파일-->
        </property>
        <property name="propNameA">
            <ref bean="propBeabnameA" />
        </property>
        <property name="propNameB">
            <ref bean="propBeabnameB" />
        </property>

    </bean>
    
    <bean id="schedulerCronDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="schedulerCronClass" />
        <property name="targetMethod" value="SchedulerCronDemon" />
        <property name="concurrent"><value>false</value></property>
    </bean>
    
    <bean id="schedulerCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="schedulerCronDetail" />
           <property name="cronExpression" value="0 30 7 * * ?" />
    </bean>
<!----------------------------------------------------------->



</beans>



SchedulerDemon.java

public class SchedulerDemon {
    
    private DataSourceTransactionManager transactionManager;
    private PropNameA propBeabnameA;
    private PropNameB propBeabnameB;

    public void setPropNameA(PropNameA a){
        propBeabnameA = a;
    }

    public void setPropNameA(PropNameA a){
        propBeabnameA = a;
    }
    
    public void doSchedulerDemon() {        
        System.out.println("***************");        
        System.out.println("****SchedulerDemon    Scheduler RUN ");        
        System.out.println("***************");        
    }
}



SchedulerCronClass.java

public class SchedulerCronClass {
    protected final Log logger = LogFactory.getLog(getClass());
    
    private DataSourceTransactionManager transactionManager;
    private PropNameA propBeabnameA;
    private PropNameB propBeabnameB;

    public void setPropNameA(PropNameA a){
        propBeabnameA = a;
    }

    public void setPropNameA(PropNameA a){
        propBeabnameA = a;
    }
    
    
    public void SchedulerCronDemon() {
        System.out.println("***************");        
        System.out.println("****SchedulerDemon    Scheduler RUN ");        
        System.out.println("***************");        
        
    }
}

반응형