spring常规任务(轻便易)
2015-09-18 14:21
453 查看
spring提供了定时任务功能。我们不需要第三者jar包支持。spring够了。
代码:
applicationContext.xml配置文件:
注意事项:
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的差别写在凝视上了。
以上情况不基于注解纯配置例如以下:
代码:
附: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触发
特殊字符 意义
* 表示全部值。
?
表示未说明的值,即不关心它为何值。
- 表示一个指定的范围;
, 表示附加一个可能值;
/ 符号前表示開始时间,符号的每个增量后值;
代码:
package com.inth.product.web.task; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.inth.product.service.impl.ContractServiceImpl; @Component("changeStateTask") public class ChangeStateTask{ @Autowired private ContractServiceImpl contractServiceImpl; /** * 定时更改合同状态 * 0 0 * * * ? 表示每次秒和分为0时触发一次(每小时一次) * "@Scheduled"时spring提供的定时任务标签 * 须要在applicationContext.xml中加入 * 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 " * <task:annotation-driven scheduler="qbScheduler" mode="proxy"/> * <task:scheduler id="qbScheduler" pool-size="10"/ * ChangeStateTask.doJob()<BR> * <P>Author : DingYinLong </P> * <P>Date : 2014年7月28日 </P> */ @Scheduled(cron = "0 0 * * * ?") public void doJob(){ this.contractServiceImpl.executeStateChange(); } /** * 固定每分钟运行一次 * ChangeStateTask.doJob1()<BR> * <P>Author : DingYinLong </P> * <P>Date : 2014年8月1日 </P> */ @Scheduled(fixedRate = 60*1000) public void doJob1(){ System.out.println(new Date() + "-----------------doJob1"); } /** * 上次任务结束后一分钟后再次运行 * ChangeStateTask.doJob2()<BR> * <P>Author : DingYinLong </P> * <P>Date : 2014年8月1日 </P> */ @Scheduled(fixedDelay = 60*1000) public void doJob2(){ System.out.println(new Date() + "-----------------doJob2"); } }
applicationContext.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "> <!-- 扫描包基础文件夹 --> <context:component-scan base-package="com.inth" /> <!-- 识别@Scheduled注解 --> <task:annotation-driven scheduler="qbScheduler" mode="proxy"/> <task:scheduler id="qbScheduler" pool-size="10"/> </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的差别写在凝视上了。
以上情况不基于注解纯配置例如以下:
代码:
package com.inth.product.web.task; import java.util.Date; import com.inth.product.service.impl.ContractServiceImpl; public class ChangeStateTask{ private ContractServiceImpl contractServiceImpl; public void doJob(){ System.out.println(new Date() + "-----------------doJob"); // this.contractServiceImpl.executeStateChange(); } public void doJob1(){ System.out.println(new Date() + "-----------------doJob1"); } public void doJob2(){ System.out.println(new Date() + "-----------------doJob2"); } }applicationContext.xml配置:
<?xml version="1.0" encoding="UTF-8"? > <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd "> <!-- 扫描包基础文件夹 --> <context:component-scan base-package="com.inth" /> <bean name="taskJob" class="com.inth.product.web.task.ChangeStateTask"></bean> <task:scheduled-tasks> <task:scheduled ref="taskJob" method="doJob" cron="0/5 * * * * ? "/> <task:scheduled ref="taskJob" method="doJob1" fixed-rate="5000"/> <task:scheduled ref="taskJob" method="doJob2" fixed-delay="5000"/> </task:scheduled-tasks> </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触发
特殊字符 意义
* 表示全部值。
?
表示未说明的值,即不关心它为何值。
- 表示一个指定的范围;
, 表示附加一个可能值;
/ 符号前表示開始时间,符号的每个增量后值;
相关文章推荐
- ubuntu openjdk-8-*安装和版本更新
- eclipse 添加server、svn
- 主题:Java WebService 简单实例
- Eclipse中关联源码
- Java文件操作:拷贝、读取文件等
- JavaIO 系统
- JDK和JRE的区别及各自的作用
- javaee后台适合用的编辑器插件
- Eclipse安装SVN插件
- 昨天做了一个使用javamail发送文件的demo
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
- Java基础の乱弹琴二:break关键字
- struts2请求的URL的搜索路径的顺序概述
- org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc
- 结对博客(Java通信项目QQ)
- BigDecimal.setScale 处理java小数点
- 使用JavaWeb项目的路径参数问题总结
- Java写九九乘法表
- java SE复习笔记22
- Struts的Tiles框架