1. Core表达式
语法:Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
- core字段:
字段 | 允许值范围 | 允许的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
时 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W C |
月 | 1-12 或者 JAN-DEC | , - * / |
星期 | 1-7 或者 SUN-SAT | , - * ? / L C # |
年 | 留空, 1970-2099 | , - * / |
- core通配符:
符号 | 含义 |
---|---|
* | 所有值,在秒字段上表示每秒执行,分字段上表示每分钟执行… |
? | 不指定值,不需要关系当前指定的字段的值,比如每天执行,不需要关注星期,周字段可设为? |
- | 区间,如秒字段0-2表示0,1,2秒执行 |
, | 多个值如秒字段1,10,100表示在1s,10s,100s执行 |
/ | 递增触发,如秒字段0/3表示从第0秒开始,每隔3秒触发 |
L | 最后,只允许在日字段或周字段上使用,如:周字段L表示本月最后一周周六 |
W | 只允许使用在日字段上,表示距离最近的改日的工作日 |
# | 只允许在周字段上,表示每月的第几个周几,如2#3,表示每月第3个周二 |
-
常用core表达式:
每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1点执行一次:0 0 1 1 * ? 每月最后一天23点执行一次:0 0 23 L * ? 每周星期天凌晨1点实行一次:0 0 1 ? * L 在15分、30分、45分执行一次:0 15,30,45 * * * ? 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
2. @Scheduled使用:
@Component("Job")
public class Job {
@Scheduled(cron = "0 0 0/1 * * ?") // 每隔1个小时执行一次
public void doSomething() {
try {
System.out.println("do something");
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:需在spring-mvc.xml中配置自动扫描,扫描到配置的类
<!-- 自动扫描所有包下的所有类,使其认为spring mvc的控制器 -->
<context:component-scan base-package="项目地址" />