1. 程式人生 > 其它 >SpringBoot專案-定時任務

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

原文連結:https://www.cnblogs.com/dubhlinn/p/10740838.html