Spring3.0以后自带自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种
如下,配置文件方式
项目目录结构以及所需jar包如下:
1.首先确定需要定时执行的java方法TaskScaner的execScanTask方法
package com.bjsxt.cronjob; public class TaskScaner { public void execScanTask(){ System.out.println("定时任务...."); } }
2.配置spring的配置文件beans.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:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <!-- 在beans中这里加入了 xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd --> <task:annotation-driven /> <!-- 定时器开关--> <bean id="taskScaner" class="com.bjsxt.cronjob.TaskScaner"></bean> <task:scheduled-tasks> <!-- 这里表示的是从第五秒开始 ,每三秒执行一次 (而不是 三分之五 秒执行一次哦~~) --> <task:scheduled ref="taskScaner" method="execScanTask" cron="5/3 * * * * ?" /> </task:scheduled-tasks> </beans>
3.编写定时任务测试类CronJobTest.java
package com.bjsxt.cronjob; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 定时任务测试 * @author gaoweigang * */ public class CronJobTest { public static void main(String[] args) throws Exception { String[] config = {"beans.xml"}; ApplicationContext act = new ClassPathXmlApplicationContext(config); } }
cron表达式:-是用空格分开的时间字段,不使用年。
*(秒0-59) *(分钟0-59) *(小时0-23) *(日期1-31) *(月份1-12或是JAN-DEC) *(星期1-7或是SUN-SAT)
示例:
*/5 * * * * 6-7 :: 每个周6到周日,每隔5秒钟执行一次。
*/1 * * 7-9 1-2 1-7 :: 1月到2月中的7号到9号,且必须要满足周一到周日,每隔1秒钟执行一次。
*/1 * * 7-9 1,5 1-7 :: 注意里面的,(逗号),只有1月和5月的7到9号,且必须要满足周一到周日,每一秒钟执行一次。
*/1 17-59 * 7-9 1,5 1-7 :: 只解释17-59,是指从第17分钟到第59分钟,在指定的时间内,每一秒种执行一次
* 17-59 * 7-9 1,5 1-7 :: 此代码的功能与上面完全相同。如果不写秒即为每一秒执行一次。
59 19-23 * 7-9 1,5 1-7 :: 19分-23分的每59秒钟时只执行一次。
59 19,26 * 7-9 1,5 1-7 :: 注意里面的,(逗号),是指只有19分或是26分的56秒钟时执行一次。
* * 16-23 7-9 1,5 1-7 :: 定义每天的16点到23点每一秒钟执行一次。
59 59 23 * * 1-5 :: 定义每周1到周5,晚上23:59:59秒只执行一次。这个相当用有。可以工作时间每天给用户发邮件。
annotation用法的可以参考原文。。。
原文:http://blog.csdn.net/yusimiao/article/details/25654899