使用Scheduled的方式实现定时任务
本意:想凌晨1点定时执行服务层的某个方法,那么如果在非Service/非Controller层成功注入Service层,需要将注入的对象交由静态对象管理。
注入完成后按需改变@Scheduled后面域即可实现定时任务
import com.scau.amops.service.IAmopsAgrimacRunrecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class TimingTask {
@Autowired
IAmopsAgrimacRunrecordService amopsAgrimacRunrecordServiceAuto; //注入对象
private static IAmopsAgrimacRunrecordService amopsAgrimacRunrecordService; //静态对象
@PostConstruct
public void init(){
amopsAgrimacRunrecordService = this.amopsAgrimacRunrecordServiceAuto; //注入的对象由静态对象管理
}
//每天凌晨1点定时执行该任务
@Scheduled(cron = "0 0 1 * * ?")
public void timingExecuteCalculateRunRecordToSecond() {
amopsAgrimacRunrecordService.calculateAmopsAgrimacRunrecordToSecond();
}
}
@Scheduled(cron = "0 0 1 * * *")中的域如何更改?
cron表达式中可以有6个或7个域,年不是必须的域,可以省略年,则一共6个域
@Scheduled(cron = "秒 分 时 日 月 周 年")
域范围
| 域 | 范围 | 可使用的通配符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 时 | 0-23 | , - * / |
| 日 | 1-31 | , - * ? / L W |
| 月 | 1-12 / JAN-DEC | , - * / |
| 周 | 1-7 or SUN-SAT | , - * ? / L # |
| 年 | 1970-2099 | , - * / |
通配符说明:
,表示指定多个值,比如周设置为MON,FRI,表示周一和周五触发-表示区间,设置小时为15-17,表示15,16,17点都会触发*表示所有值,设置日为*,表示每天都会触发/用于递增触发,设置日为1/5,表示所示每月1号开始,每隔5天触发一次?表示不指定值,使用的场景为不需要关心当前设置这个字段的值L表示最后的意思,只可用在日和周,设置日为L,表示当月的最后一日,周字段上设置6L这样的格式,则表示本月最后一个星期五W表示离指定日期的最近那个工作日(周一至周五),设置日为10W,表示离每月10号最近的那个工作日触发#序号(表示每月的第几个周几),设置周为1#2表示在每月的第2个周一
注:L和W可以一组合使用。如果在日字段上设置LW,则表示在本月的最后一个工作日触发
一些小示例供参考:
- 每隔10秒触发一次:
"*/10 * * * * ?" - 每隔10分钟触发一次:
"0 */10 * * * ?" - 每天凌晨1点触发一次:
"0 0 1 * * ?" - 每月5号凌晨1点触发一次:
"0 0 1 5 * ?" - 每月最后一天22点触发一次:
"0 0 22 L * ?" - 每周日凌晨1点触发一次:
"0 0 1 ? * L" - 在20分、40分、59分都触发一次:
"0 20,40,59 * * * ?" - 每天的8点、12点、18点、22点都触发一次:
"0 0 8,12,18,22 * * ?" - 表示在每月的1日的凌晨2点触发一次:
"0 0 2 1 * ? *" - 表示周一到周五每天上午8:30触发一次:
"0 30 8 ? * MON-FRI"/"0 30 8 ? * 1-5" - 表示2020-2030年的每个月的最后一个星期五上午10:00触发一次:
"0 0 10 ? * 6L 2020-2030"
欢迎小伙伴讨论,如有错误请在评论区评论或发私聊消息,谢谢你。
版权声明:本文为bean_business原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。