在Java中使用@Scheduled定时器的几种种操作方式。
1、fixedRate
例:@Scheduled(fixedRate = 5000) //上一次开始执行时间点之后5秒再执行
2、fixedDelay
例:@Scheduled(fixedDelay = 5000) //上一次执行完毕时间点之后5秒再执行
3、cron
例:@Scheduled(cron = "0 0/1 9-21 * * ?")//每天早上9点-晚上21点间执行,每次执行间隔一分钟
着重讲一下cron:
Scheduled(cron="0 0 21 * * ?")? 配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年] 其中每个元素 可以是一个值(如6), 一个连续区间(9-12), 一个间隔时间(8-18/4)(/表示每隔4小时), 一个列表(1,3,5), 通配符。 由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置
附上一点代码示例:
@Component
@EnableAsync
public class ThirdOverTimePushTask {
private Logger logger = LogManager.getLogger();
@Autowired
private LawyerDontReceivingService lawyerDontReceivingService;
//@Scheduled(fixedRate = 60000)//每隔一分钟执行一次
@Scheduled(cron = "0 0/1 9-21 * * ?")//每天早上9点-晚上21点间执行,每次执行间隔一分钟
public void run() {
try {
run(()-> {
logger.info("开始查询超时未接单订单进行推送");
lawyerDontReceivingService.getOverTimeOrderPushMessage();
});
}catch (RuntimeException e){
logger.error(e.getMessage());
}catch (Exception e){
logger.error(e);
}
}
public void run(Runnable runnable) {
runnable.run();
}
}
下边列一下常用的几种配置格式:
格式 | 描述 |
---|
0 0 10,14,16 * * ? | 每天上午10点,下午2点,4点 | 0 0/30 9-18 * * ? | 朝九晚六工作时间内每半小时 | 0 0 12 ? *?? ?WED | 表示每个星期三中午12点 | 0 0 12 * * ? | 每天中午12点触发 | 0 30 10 ? * * | 每天上午10:30触发 | 0 30 10 * * ? | 每天上午10:30触发 | 0 30 10 * * ? * | 每天上午10:30触发 | 0 30 10 * * ? 2022 | 2022年的每天上午10:30触发 | 0 * 14 * * ? | 在每天下午2点到下午2:59期间的每1分钟触发 | 0 0/5 14 * * ? | 在每天下午2点到下午2:55期间的每5分钟触发 | 0 “0/5 14,18 * * ? | 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 | 0 0-5 14 * * ? | 在每天下午2点到下午2:05期间的每1分钟触发 | 0 10,44 14 ? 3 WED | 每年三月的星期三的下午2:10和2:44触发 | 0 30 10 ? * MON-FRI | 周一至周五的上午10:30触发 | 0 30 10 15 * ? | 每月15日上午10:30触发 | 0 30 10 L * ? | 每月最后一日的上午10:30触发 | 0 30 10 ? * 6L | 每月的最后一个星期五上午10:30触发 | 0 30 10 ? * 6L 2022-2023 | 2022年至2023年的每月的最后一个星期五上午10:30触发 | 0 30 10 ? “* 6#3 | 每月的第三个星期五上午10:30触发 |
?
|