一看便知spring+quartz定時任務

ODJ發表於2016-07-30

 

這是我經過網上收集然後加上自己的測試寫的,以便大家使用

標配:已測
注意需要的包:(在已經配置spring 的情況下)
quartz-all-1.6.jar        spring-context-support-4.0.0.jar       
applicationContext.xml配置檔案
<!-- 總管理類 如果將lazy-init='false'那麼容器啟動就會執行排程程式  
當 IoC容器啟動時,lazy-init="true"的bean,IoC容器啟動時不會例項化該bean,只有當容器需要用到時才例項化它。lazy-init有利於容器效率,對於不需要的bean可以先不管。-->
    <bean id="testStartQuertz" lazy-init="false"
               class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
          <property name="triggers">
              <list>
                <ref bean="testDoTime"/>
                <ref bean="test111"/>
              </list>
          </property>
    </bean>
    
     <!--  每隔5秒呼叫work方法 -->
    <bean id="testDoTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <property name="jobDetail" ref="testTask"/>
          <property name="cronExpression" value="0/5 * * * * ?"/>  <!--  cron表示式 -->
    </bean>
    <!--  每隔5秒呼叫work方法 -->
    <bean id="test111" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <property name="jobDetail" ref="tquartz"/>
          <property name="cronExpression" value="0/3 * * * * ?"/>    <!--  cron表示式 -->
    </bean>
    
       
    <!-- 定義呼叫物件和呼叫物件的方法 -->
    <bean id="testTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
         <property name="targetObject" ref="testJob"/>    <!-- 呼叫的類 -->
         <property name="targetMethod" value="workquartz"/>    <!-- 呼叫類中的方法 -->
         <property name="concurrent" value="false" />
    </bean>
     <bean id="tquartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
         <property name="targetObject" ref="testJob"/>    <!-- 呼叫的類 -->
         <property name="targetMethod" value="testquartz"/>    <!-- 呼叫類中的方法 -->
         <property name="concurrent" value="false" />     <!--配置為false不允許任務併發執行--> 
    </bean>
  
    <!-- 要呼叫的工作類 -->
       <bean id="testJob" class="com.odj.sssp.test.ChangeStateTask"></bean>

測試類

public class ChangeStateTask {
    public void workquartz(){
        System.out.println(new Date()+"||"+Thread.currentThread()+"--work--" );
        try {
            TimeUnit.SECONDS.sleep(15);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    public void testquartz(){
        System.out.println(new Date()+"||"+Thread.currentThread()+"--testquartz--");
    }
}