spring 定时器

Java代码   收藏代码  

  1. 第一种 Java Timer定时  



spring配置文件:
<bean id= "reportTimerTask" class ="com.flex.thread.TaskJob"></ bean>(或者在TaskJob类中添加注释:)
<bean id= "scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask" >
            <property name="timerTask" ref="reportTimerTask" />
           <!-- 设置启动延迟 -->
          <property name="delay" >
          <value> 10000</value >
           </property>
         <!-- 后续延迟 -->
             <property name="period" >
             <value> 6000</value >
             </property>
</bean>
      
<bean class="org.springframework.scheduling.timer.TimerFactoryBean" > 
               <property name="scheduledTimerTasks" >    
               <list>< ref bean ="scheduleReportTask"/></ list>
               </property>
</bean>

class类  
 
package com.flex.thread;

import java.util.TimerTask;
public class TaskJob extends TimerTask {

       @Override
       public void run() {

         ...
     }  
}


Java代码   收藏代码  

  1. 第二种 Quartz定时器  



Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz:
首先我们来写一个被调度的类:
package com.web.quartz;

public class TaskReportJob {

       protected void work() {
            System. out.println("------定时器运行中------" );
      }

}
Spring的配置文件:
<beans>
<!-- 要调用的工作类 -->
<bean id= "quartzJob" class ="com.web.quartz.TaskReportJob" ></bean>
<!-- 定义调用对象和调用对象的方法 -- >
<bean id= "jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
    <!-- 调用的类 -->
    <property name = "targetObject" >
        <ref bean ="quartzJob" />
    </property>
    <!-- 调用类中的方法 -- >
    <property name = "targetMethod" >
        <value>work</value >
    </property>
</bean>
<!-- 定义触发时间 -- >
<bean id= "doTime" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
    <property name = "jobDetail" >
        <ref bean ="jobtask" />
    </property>
    <!-- cron 表达式 -- >
    <property name = "cronExpression" >
        <value> 10,15,20,25,30,35,40,45,50,55 * * * * ? </value >
    </property>
</bean>
<!-- 总管理类 如果将lazy- init= 'false' 那么容器启动就会执行调度程序  -- >
<bean id= "startQuertz" lazy-init = "false" autowire = "no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
    <property name = "triggers" >
        <list>
            <ref bean ="doTime" />
        </list>
    </property>
</bean>
</beans>



第三种  

定义一个类继承org.springframework.scheduling.quartz.QuartzJobBean;

Java代码   收藏代码  

  1. import java.util.ArrayList;  

  2. import java.util.HashMap;  

  3. import java.util.Iterator;  

  4. import java.util.List;  

  5. import java.util.Map;  

  6.   

  7. import org.apache.commons.logging.Log;  

  8.   

  9. import org.apache.commons.logging.LogFactory;  

  10. import org.quartz.JobExecutionContext;  

  11. import org.quartz.JobExecutionException;  

  12. import org.springframework.jdbc.core.JdbcTemplate;  

  13. import org.springframework.scheduling.quartz.QuartzJobBean;  

  14.   

  15. import com.zdvictory.approve.business.dao.AppBusiBasicDAO;  

  16.   

  17. public class UpdateWorkflowJob extends QuartzJobBean{  

  18.     private JdbcTemplate jdbcTemplate ;  

  19.     private AppBusiBasicDAO appBusiBasicDAO ;  

  20.       

  21.         private Log log = LogFactory.getLog(UpdateWorkflowJob.class);  

  22.     @Override  

  23.     protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException {  

  24.         System.out.println("执行过程");  

  25.     }  

  26.       

  27.     public AppBusiBasicDAO getAppBusiBasicDAO() {  

  28.         return appBusiBasicDAO;  

  29.     }  

  30.   

  31.     public void setAppBusiBasicDAO(AppBusiBasicDAO appBusiBasicDAO) {  

  32.         this.appBusiBasicDAO = appBusiBasicDAO;  

  33.     }  

  34.   

  35.     public JdbcTemplate getJdbcTemplate() {  

  36.         return jdbcTemplate;  

  37.     }  

  38.   

  39.     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  

  40.         this.jdbcTemplate = jdbcTemplate;  

  41.     }  

  42. }  



2、定义配置文件

Java代码   收藏代码  

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  

  3. <beans>     

  4.     <bean id="updateWorkflowJob"  

  5.         class="org.springframework.scheduling.quartz.JobDetailBean">  

  6.         <property name="jobClass">  

  7.             <value>  

  8.                 com.zdvictory.workflow.timer.UpdateWorkflowJob  

  9.             </value>  

  10.         </property>  

  11.         <property name="jobDataAsMap">  

  12.             <map>  

  13.                 <entry key="jdbcTemplate">  

  14.                     <ref bean="jdbcTemplate_sjjh"/>  

  15.                 </entry>  

  16.                 <entry key="appBusiBasicDAO">  

  17.                     <ref bean="appBusiBasicDAO"/>  

  18.                 </entry>  

  19.             </map>  

  20.         </property>  

  21.     </bean>  

  22.       

  23.     <bean id="updateWorkflowJobTrigger"  

  24.         class="org.springframework.scheduling.quartz.CronTriggerBean">  

  25.         <property name="jobDetail">  

  26.             <ref bean="updateWorkflowJob" />  

  27.         </property>  

  28.         <property name="cronExpression">  

  29.         <!-- 每分钟执行一次 -->  

  30.             <value>0 0/1 8-23 * * ?</value> 8-23:早上8点至晚上23点正常执行  

  31.         </property>  

  32.     </bean>  

  33.     <!-- 启动定时器 -->  

  34.     <bean id="start" lazy-init="false"  

  35.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  

  36.         <property name="triggers">  

  37.             <list>  

  38.                 <ref bean="updateWorkflowJobTrigger" />  

  39.             </list>  

  40.         </property>  

  41.     </bean>  

  42. </beans> 


Java代码   收藏代码  

  1. 表达式意义   



"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

转载于:https://my.oschina.net/redhat1520/blog/141609

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值