一、在spring-cloud(spring-boot)中:
使用spring的定时器,spring自带支持定时器的任务实现。其可通过简单配置来使用到简单的定时任务。
@Component
@Configurable
@EnableScheduling
public class ScheduledSitemapController {
//每1分钟执行一次
@Scheduled(cron = "0 */1 * * * * ")
public void reportCurrentByCron(){
System.out.println ("Scheduling Tasks Examples By Cron: The time is now " + dateFormat ().format (new Date ()));
}
private SimpleDateFormat dateFormat(){
return new SimpleDateFormat ("HH:mm:ss");
}
}
使用spring的定时任务就这么简单,其中有几个比较重要的注解:
@EnableScheduling:标注启动定时任务。
@Scheduled(fixedRate = 1000 * 30) 定义某个定时任务。
二、在springmvc架构中:
在beans文件中分别加入 :
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd ">
配置定时类文件:
<!-- 配置定时器 -->
<bean id="synchroDataTask" class="com.huatugz.ins.task.SynchroDataTask"></bean>
<task:scheduled-tasks>
<!-- 设置synchroDataTask类中方法getData的定时规则 -->
<task:scheduled ref="synchroDataTask" method="getData" cron="0/10 * * * * ?"/>
</task:scheduled-tasks>
注释:cron="0/10 * * * * ?"/> 逻辑
三、域中符号解释:
分别代表意思:* * * * * * 代表秒、分、时、天、月、星期
在jenkins中:* * * * * 代表的是分、时、天、月、星期。
一:
1. * :表示匹配任意值。比如在Seconds域中配置为*,则表示每秒执行。(可用于任意域)
2. ?:只能用在 DayofMonth和DayofWeek,表示匹配该域的任意值。
3. -:表示范围。例如:在Seconds域中配置2-10,则表示从2到10秒内,每秒执行。
4. /:表示从起始开始触发,然后每个固定时间执行一次。比如在Seconds域中配置5/20,则表示在第5秒开始执行,然后每过20秒执行一次(以每一分钟为周期)。
5. ,:表示枚举值。例如在Seconds域中配置5,20,25,则表示在第5秒、20秒和25秒执行。
6. L:只能用在 DayofMonth和DayofWeek,表示每周或者每月的最后一天。如果DayofWeek域配置5L则表示最后一个星期的周四执行。
二:
"0 0 */2 * * ?" 与"0 0 0/2 * * ?" 都为每两小时运行一次,区别为,前者从任意时间开始的两小时,后者为从一天的0点开始后每两小时。
三:Cron 常用表达式
"0 * * * * ?"
每分钟执行一次
"0 0/5 * * * ?"
每隔5分钟执行一次
"0 0/15 * * * ?"
每隔15分钟执行一次
"0 0 * * * ?" />
每隔1小时执行一次
"0 0 */2 * * ?"
每隔2小时执行一次
"0 0 0,12 * * ?" />
每天0点和12点各执行一次
"0 0 8 * * ?"
每天早上8点执行一次
"0 0 2 ? * FRI" />
逢星期五零晨2点执行一次
"0 0 2 ? * MON-FRI"
星期一到星期五零晨2点执行一次
"0 0 2 1 * ?" />
每月1号零晨2点执行一次
"0 0 2 L * ?"
每月最后一天零晨2点执行一次
"0 0 12 * * ?"
每天中午12点执行一次
"0 15 10 ? * *"
每天上午10点15执行一次