好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java @Scheduled定时器用法解析

@Scheduled定时器用法

程序中若需要在某个时间循环执行某项任务,就可以使用@Scheduled定时器

源码如下:

?

1

2

3

4

    @Scheduled (cron= "0 0 21 * * ?" ) //每天晚上九点执行一次    21点

    public void taskCycle() throws   Exception{

        System.out.println( "############定时校验代金券过期任务开始执行" );

        }

?

1

@Scheduled (cron= "0 0 21 * * ?" ) 

配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]

其中每个元素 可以是一个值(如6),

一个连续区间(9-12), 一个间隔时间(8-18/4)(/表示每隔4小时), 一个列表(1,3,5), 通配符。

由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
[0 0 12 * * ?] 每天中午12点触发
[0 15 10 ? * *] 每天上午10:15触发
[0 15 10 * * ?] 每天上午10:15触发
[0 15 10 * * ? *] 每天上午10:15触发
[0 15 10 * * ? 2005] 2005年的每天上午10:15触发
[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 15 10 ? * MON-FRI] 周一至周五的上午10:15触发
[0 15 10 15 * ?] 每月15日上午10:15触发
[0 15 10 L * ?] 每月最后一日的上午10:15触发
[0 15 10 ? * 6L] 每月的最后一个星期五上午10:15触发
[0 15 10 ? * 6L 2002-2005] 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? [* 6#3] 每月的第三个星期五上午10:15触发

@Scheduled的几种使用方式

两个方法串行执行

直接在方法上加上@Scheduled注解,

两个方法并行,且自己也并行

添加@EnableAsync和@Async注解

两个方法并行,且自己串行

做如下配置,就可以实现了

?

1

2

3

4

5

6

7

8

9

10

11

12

@Configuration

@EnableScheduling

public class ScheduleConfig implements SchedulingConfigurer {

    @Override

    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.setScheduler(taskExecutor());

    }

    @Bean (destroyMethod= "shutdown" )

    public Executor taskExecutor() {

        return Executors.newScheduledThreadPool( 2 );

    }

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/u011374582/article/details/82883620

查看更多关于Java @Scheduled定时器用法解析的详细内容...

  阅读:23次