spring定时任务

spring提供了定时任务功能,不需要第三方jar包支持,spring足以。

代码:

[java]  view plain  copy
  1. package com.inth.product.web.task;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.scheduling.annotation.Scheduled;  
  7. import org.springframework.stereotype.Component;  
  8.   
  9. import com.inth.product.service.impl.ContractServiceImpl;  
  10.   
  11. @Component("changeStateTask")  
  12. public class ChangeStateTask{  
  13.       
  14.     @Autowired  
  15.     private ContractServiceImpl contractServiceImpl;  
  16.     /** 
  17.      * 定时更改合同状态 
  18.      * 0 0 * * * ?  表示每次秒和分为0时触发一次(每小时一次) 
  19.      * "@Scheduled"时spring提供的定时任务标签 
  20.      * 需要在applicationContext.xml中添加 
  21.      * xmlns:task="http://www.springframework.org/schema/task"  
  22.      * xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd " 
  23.      *  <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>   
  24.      *  <task:scheduler id="qbScheduler" pool-size="10"/ 
  25.      * ChangeStateTask.doJob()<BR> 
  26.      * <P>Author : DingYinLong </P>   
  27.      * <P>Date : 2014年7月28日 </P> 
  28.      */  
  29.     @Scheduled(cron = "0 0 * * * ?")  
  30.     public void doJob(){  
  31.         this.contractServiceImpl.executeStateChange();  
  32.     }  
  33.     /** 
  34.      * 固定每分钟执行一次 
  35.      * ChangeStateTask.doJob1()<BR> 
  36.      * <P>Author : DingYinLong </P>   
  37.      * <P>Date : 2014年8月1日 </P> 
  38.      */  
  39.     @Scheduled(fixedRate = 60*1000)  
  40.     public void doJob1(){  
  41.         System.out.println(new Date() + "-----------------doJob1");  
  42.     }  
  43.     /** 
  44.      * 上次任务结束后一分钟后再次执行 
  45.      * ChangeStateTask.doJob2()<BR> 
  46.      * <P>Author : DingYinLong </P>   
  47.      * <P>Date : 2014年8月1日 </P> 
  48.      */  
  49.     @Scheduled(fixedDelay = 60*1000)  
  50.     public void doJob2(){  
  51.         System.out.println(new Date() + "-----------------doJob2");  
  52.     }  
  53. }  

applicationContext.xml配置文件:


[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns:context="http://www.springframework.org/schema/context"    
  4.     xmlns:task="http://www.springframework.org/schema/task"   
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd   
  8.         http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd ">  
  9.     <!-- 扫描包基础目录 -->  
  10.     <context:component-scan base-package="com.inth" />  
  11.     <!-- 识别@Scheduled注解 -->  
  12.     <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>    
  13.     <task:scheduler id="qbScheduler" pool-size="10"/>   
  14. </beans>  

注意事项:

1,beans 属性加上xmlns:task="http://www.springframework.org/schema/task"以及xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "

2,fixedRate和fixedDelay的区别写在注释上了。



以上情况不基于注解纯配置如下:

代码:

[java]  view plain  copy
  1. package com.inth.product.web.task;  
  2.   
  3. import java.util.Date;  
  4.   
  5.   
  6. import com.inth.product.service.impl.ContractServiceImpl;  
  7.   
  8. public class ChangeStateTask{  
  9.     private ContractServiceImpl contractServiceImpl;  
  10.     public void doJob(){  
  11.         System.out.println(new Date() + "-----------------doJob");  
  12. //      this.contractServiceImpl.executeStateChange();  
  13.     }  
  14.     public void doJob1(){  
  15.         System.out.println(new Date() + "-----------------doJob1");  
  16.     }  
  17.     public void doJob2(){  
  18.         System.out.println(new Date() + "-----------------doJob2");  
  19.     }  
  20. }  
applicationContext.xml配置:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns:context="http://www.springframework.org/schema/context"    
  4.     xmlns:task="http://www.springframework.org/schema/task"   
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd   
  8.         http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd ">  
  9.     <!-- 扫描包基础目录 -->  
  10.     <context:component-scan base-package="com.inth" />  
  11.     <bean name="taskJob" class="com.inth.product.web.task.ChangeStateTask"></bean>  
  12.     <task:scheduled-tasks>     
  13.         <task:scheduled ref="taskJob" method="doJob" cron="0/5 * * * * ?"/>    
  14.         <task:scheduled ref="taskJob" method="doJob1" fixed-rate="5000"/>    
  15.         <task:scheduled ref="taskJob" method="doJob2" fixed-delay="5000"/>     
  16.     </task:scheduled-tasks>  
  17. </beans>  

附:cron表达式配置说明 


字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * / 
表达式 意义 
"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触发 
特殊字符 意义 
* 表示所有值; 
? 表示未说明的值,即不关心它为何值; 
- 表示一个指定的范围; 
, 表示附加一个可能值; 

/ 符号前表示开始时间,符号后表示每次递增的值;


http://blog.csdn.net/qq525099302/article/details/38338921

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值