SpringBoot專案-定時任務
1.首先在啟動類上加上@EnableScheduling註解
@SpringBootApplication
@EnableScheduling //開啟定時功能的註解,放在主入口
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
2、寫定時任務
@RestController public class TimerController { /** * 秒 分 時 日 月 周幾 * 0 * * * * 1-7 * 注意cron表示式的用法: * 這裡是每2秒執行一次 */ @Scheduled(cron = "0/2 * * * * ?") public void hello() { System.out.println("定時任務執行了....."); } }
3、啟動專案定時任務根據cron表示式執行
4、cron表示式的用法
cron表示式通過特定的規則指定時間,用於定時任務,本文簡單記錄它的部分語法和例項,並不完全,能覆蓋日常大部分需求。
1. 整體結構
cron表示式是一個字串,分為6或7個域,每兩個域之間用空格分隔,其語法格式為:
"秒域 分域 時域 日域 月域 周域 年域"
其中,年域可以省略,省略時表示每年。
2. 每個域的取值範圍
域名 | 可取值 | 可取符號(僅列部分常用) |
---|---|---|
秒域 | 0~59的整數 | * - , / |
分域 | 0~59的整數 | * - , / |
時域 | 0~23的整數 | * - , / |
日域 | 1~31的整數 | * - , / ? L |
月域 | 112的整數或JANDEC | * - , / |
周域 | 17的整數或SUNSAT | * - , / ? L # |
年域 | 1970~2099的整數 | * - , / |
3. 符號的意義
(1)* 表示可以匹配該域的所有值;
例如,"0 0 13 * * ?"表示每天的13點執行一次。
(2)?在cron表示式中必須出現且只能出現1次,用在日域或周域上,表示不確定值、不限制值;
它與*的區別是,並不能匹配到該域上的所有值,例如指定了3月份每個週五,那麼3月份的週五可能只有4個值;
例如,"0 0 5 6 * ?"表示每個月6日5點鐘執行而無論周幾,"0 0 5 ? * 3"表示每個週三5點鐘執行而無論是幾號。
(3)- 表示匹配該域上的一個範圍;
例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小時執行一次,"0 1-5 * ? * 1"表示每週日每個小時的1-5分鐘每分鐘執行一次。
(4), 表示列舉值;
例如,"0 0 8,16,23 ? * 1,7"表示每個週六日的8點、16點、23點各執行一次。
(5)/ 表示起始時間和間隔時間;
例如,"0 0 3/5 * * ?"表示每天3點開始執行,每隔5個小時執行一次,即3點、8點、13點、18點、23點各執行一次,
"*/5 * * * * ?"表示每隔5秒鐘執行一次,"0 */1 * * * ?"表示每隔1分鐘執行一次。
(6)# 只能用於周域上,#後面的數字表示第幾周,如果不存在這個周的值,則不執行;
例如,"0 0 0 ? * 5#2"表示每個月第2個週四零點執行,"15 30 6 ? * 7#5"表示每個月第5個週六6:30:15執行,如果某個月不存在第5個週六,則不執行。
(7)L 只能用於日域或周域,用於日域時表示當月最後一天,用於周域如果前面不加數字表示週六,加數字表示最後一個周值;
例如,"0 0 23 L * ?"表示每月最後一天的23點執行,"0 0 23 ? * L"表示每週六的23點執行,"0 0 23 ? * 3L"表示每月最後一個週二的23點執行。
4. 一些常見的例項(省略雙引號)
意義 | 表示式 |
---|---|
每隔5秒鐘執行一次 | */5 * * * * ? |
每隔1分鐘執行一次 | 0 */1 * * * ? |
每天1點執行一次 | 0 0 1 * * ? |
每天23點55分執行一次 | 0 55 23 * * ? |
每月最後一天23點執行一次 | 0 0 23 L * ? |
每週六8點執行一次 | 0 0 8 ? * L |
每月最後一個週五,每隔2小時執行一次 | 0 0 */2 ? * 6L |
每月的第三個星期五上午10:15執行一次 | 0 15 10 ? * 5#3 |
在每天下午2點到下午2:05期間的每1分鐘執行 | 0 0-5 14 * * ? |
表示週一到週五每天上午10:15執行 | 0 15 10 ? * 2-6 |
每個月的最後一個星期五上午10:15執行 | 0 15 10 ? * 6L |
每天上午10點,下午2點,4點執行一次 | 0 0 10,14,16 * * ? |
朝九晚五工作時間內每半小時執行一次 | 0 0/30 9-17 * * ? |
每個星期三中午12點執行一次 | 0 0 12 ? * 4 |
每年三月的星期三的下午2:10和2:44各執行一次 | 0 10,44 14 ? 3 4 |
每月的第三個星期五上午10:15執行一次 | 0 15 10 ? * 6#3 |
每月一日凌晨2點30執行一次 | 0 30 2 1 * ? |
每分鐘的第10秒與第20秒都會執行 | 10,20 * * * * ? |
每月的第2個星期的周5,凌晨執行 | 0 0 0 ? * 6#2 |