Java @Scheduled定時器用法解析

@Scheduled定時器用法

程序中若需要在某個時間循環執行某項任務,就可以使用@Scheduled定時器

源碼如下:

    @Scheduled(cron="0 0 21 * * ?") //每天晚上九點執行一次    21點
    public void taskCycle() throws  Exception{
        System.out.println("############定時校驗代金券過期任務開始執行");
        }
@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註解

兩個方法並行,且自己串行

做如下配置,就可以實現瞭

@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);
    }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: