使用 @schedule 注解 完成各种定时设定。官方 API
@Scheduled中可以指定如下3中时间表达式:
1.
@Scheduled(fixedRate=2000) // 每隔2秒执行一次 public void fixedRate(){ System.out.println("fixedRate..."); }
2.
@Scheduled(fixedDelay=2000) // 在上一次执行完成后延迟 2 秒再执行该方法 public void fixedDelay(){ System.out.println("fixedDelay..."); }
3.
@Scheduled(cron=" * * * * * * ") // 每秒执行 public void cron(){ System.out.println("cron..."); }
cron 里其实是 cron 表达式。一个cron表达式是由六个或者七个子表达式(字段)组成的字符串。而子表达式或者称为字段之间用空格隔开。
字段名 | 是否必需 | 允许的值 | 允许的特殊字符 |
秒(seconds) | Y | 0-59 | , - * / |
分(minutes) | Y | 0-59 | , - * / |
时(hours) | Y | 0-23 | , - * / |
天(day of month) | Y | 1-31 |
, - * /L W C |
月(month) | Y | 0-11 或者 JAN-DEC | , - * / |
星期(day of week) | Y | 1-7 或者 SUN-SAT | , - * /?L C# |
年(year) | N | 1970-2099或者不写 | , - * / |
还记得上面的六个 “*”么 ?从第一位到最后一位分别表示秒 分 时 天 月 星期 年 最后一位年可以不写。
对于以上特殊字符,可以这么理解:
“,”表示and
“-”表示一个区间段,即开始到结束
“*”表示全选,即用汉语中的“每”或者英文中的every/each/per
“/”表示一个区间段的时长,例如放在第一位“/10”则表示每10秒
“L”表示最后,即Last
“W”表示weekday,即工作日也就是周一到周五
“C”表示canlendar,即日历,例如“1C”在星期位上就是包括日历上的星期日
“#”表示序列,如“#2”表示第二
如果使用 spring boot 搭建,定时器不运行,可参考
https://spring.io/guides/gs/scheduling-tasks/
参考来自:
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html
http://stackoverflow.com/questions/11608531/injecting-externalized-value-into-spring-annotation
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html
http://my.oschina.net/crazyharry/blog/347687