Java中使用@Scheduled定时器操作

在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触发


 

你可能感兴趣的:(Java开发之路,Java,Scheduled,Java定时器设置,java,fixedRate,java,cron)