Springboot的默認定時任務——Scheduled註解
本博客參考博文地址。
1.pom依賴:
引入springboot starter包即可
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</ groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
< optional>true</optional>
</dependency>
</dependencies>
2.啟動類啟用定時任務:
在啟動類上加註解:@EnableScheduling即可實現。
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.創建定時任務實現類:
定時任務1:
@Component
public class SchedulerTask {
private int count=0;
@Scheduled(cron="*/6 * * * * ?")
private void process(){
System.out.println("this is scheduler task runing "+(count++));
}
}
定時任務2:
@Component
public class Scheduler2Task {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 6000)
public void reportCurrentTime() {
System.out.println("現在時間:" + dateFormat.format(new Date()));
}
}
結果如下:
this is scheduler task runing 0
現在時間:09:44:17
this is scheduler task runing 1
現在時間:09:44:23
this is scheduler task runing 2
現在時間:09:44:29
this is scheduler task runing 3
現在時間:09:44:35
參數說明:
@Scheduled接受兩種定時的設置:
一種是cornexpression。
一種是Rate/Delay表達式(毫秒值):
@Scheduled(fixedRate = 6000):上一次開始執行時間點後每隔6秒執行一次。
@Scheduled(fixedDelay = 6000):上一次執行完畢時間點之後6秒再執行。
@Scheduled(initialDelay=1000, fixedRate=6000):第一次延遲1秒後執行,之後按fixedRate的規則每6秒執行一次。
cornexpression表達式詳解:
完整字段:[秒] [分] [小時] [日] [月] [周] [年]
字段 允許值 允許特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小時 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12或JAN-DEC , - * /
周 1-7或SUN-SAT , - * ? / L C #
年 留空或1970-2099 , - * /
註:
*表示所有值,在分鐘裏表示每一分鐘觸發。在小時,日期,月份等裏面表示每一小時,每一日,每一月。
?表示不指定值。表示不關心當前位置設置的值。 比如不關心是周幾,則周的位置填寫?。 主要是由於日期跟周是有重復的所以兩者必須有一者設置為?
- 表示區間。小時設置為10-12表示10,11,12點均會觸發。
,表示多個值。 小時設置成10,12表示10點和12點會觸發。
/ 表示遞增觸發。 5/15表示從第5秒開始,每隔15秒觸發。
L 表示最後的意思。 日上表示最後一天。星期上表示星期六或7。 L前加數據,表示該數據的最後一個。
星期上設置6L表示最後一個星期五。 6表示星期五
W表示離指定日期最近的工作日觸發。15W離該月15號最近的工作日觸發。
#表示每月的第幾個周幾。 6#3表示該月的第三個周五。
示例:
"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觸發
每天早上6點 0 6 * * * 每兩個小時 0 */2 * * *
晚上11點到早上8點之間每兩個小時,早上八點 0 23-7/2,8 * * *
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-3
1月1日早上4點 0 4 1 1 *
Springboot的默認定時任務——Scheduled註解