这两天做东西正好用到了定时操作的需求,之前没有搞过,网上一搜,挺简单的,下面记录一下,方便以后查看。实现的途径有两种:Quartz 和spring Task
所谓条条大路通罗马,能实现需求就行,我用的是spring Task.
第一步:
首先,编写好自己的任务接口。
package com.beefly.monitor.inteceptor;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.dubbo.config.annotation.Service;
import com.beefly.monitor.service.BikeService;
@Service
public class TaskSaveBikeState {
@Autowired
private BikeService bikeService;
/**
* 定时插入BikeState信息
*/
public void TaskOne(){
System.out.println("task定时任务");
System.out.println("结束任务");
}
}
第二步:修改spring配置文件
1、在beans增加task支持
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context=
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd"
2、配置定时器开关
<task:scheduled-tasks>
<task:scheduled ref="taskJob" method="TaskOne" cron="0/3 * * * * ?"/>
<!-- <task:scheduled ref="taskJob" method="TaskTwo" cron="0 0 0 * * ?"/> -->
</task:scheduled-tasks>
到此就配置完成了(spring要开启扫描,扫描到任务接口的包),启动项目之后,以3秒间隔进行定时调用任务接口,如下:
总结:配置多个任务,写多个定时任务接口,在<task:scheduled-tasks>标签里面配置多个
task:scheduled ref="taskJob" method="TaskOne" cron="0/3 * * * * ?"/>即可;“cron=”是指定什么时间启动。常见用法如下:
"0 0 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分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发