一、scheduled註解cron
1、scheduled註解是Spring框架中用於定時執行方法的註解。其中cron用於設定定時任務的執行時間。cron表達式是由6個或7個空格分隔的時間元素欄位組成,每個欄位表達一個時間的意義。常見的格式為:秒 分 時 日 月 周,如「0 0 12 * * ?」表示每天中午12點觸發執行。每個時間元素欄位可以使用逗號、星號、連接符等符號設定多個取值或範圍。
2、以每天中午12點觸發執行為例,可以設置cron屬性為「0 0 12 * * ?」。
@Scheduled(cron = "0 0 12 * * ?") public void execute() { //... }
3、對於cron表達式的具體使用方法,可以參考相關文檔或在線cron表達式生成工具。
二、scheduled註解cron mon
1、除了固定時間元素外,cron表達式中還有一個「周」的時間元素,用於設定一周中的哪些天需要執行任務。使用「?」佔位符代表忽略掉該時間元素欄位,例如「0 0 12 ? * MON-FRI」表示每個工作日中午12點觸發執行。
@Scheduled(cron = "0 0 12 ? * MON-FRI") public void execute() { //... }
2、有時候需要同時設定小時和周的時間元素,可以使用連接符「/」設定時間間隔,例如「0 0 0/2 * * ?」表示每兩小時執行一次。
@Scheduled(cron = "0 0 0/2 * * ?") public void execute() { //... }
三、scheduled註解配置時間
1、除了使用cron表達式設定定時任務的執行時間外,還可以使用fixedRate、fixedDelay、initialDelay屬性分別設定固定速率執行、固定延遲後執行、初始延遲後開始執行。
2、fixedRate表示任務開始後按照一定的頻率執行,即從任務開始時計算下一次執行時間,無論上次執行是否完成,都按照間隔時間進行執行。使用示例如下:
@Scheduled(fixedRate = 1000) public void execute() { //... }
3、fixedDelay表示任務完成後按照一定的延遲時間後再次執行,即從任務結束時計算下一次執行時間。使用示例如下:
@Scheduled(fixedDelay = 1000) public void execute() { //... }
4、initialDelay表示任務啟動後延遲一定時間再開始執行。使用示例如下:
@Scheduled(initialDelay = 1000, fixedDelay = 1000) public void execute() { //... }
四、scheduled註解不執行
1、在某些情況下,可能需要臨時禁止某個定時任務的執行,可以使用@ConditionalOnProperty註解和配置文件來實現。
2、例如,給定配置文件中配置了一個名為「task.enable」的布爾類型屬性,表示定時任務是否可用。在應用啟動時,Spring會讀取該配置文件並根據該屬性決定是否創建定時任務:
@Scheduled(cron = "0 0 12 * * ?") @ConditionalOnProperty(name = "task.enable", havingValue = "true", matchIfMissing = true) public void execute() { //... }
五、scheduled註解是分散式的嗎
1、Spring框架的定時任務默認是單機運行的,不支持分散式環境下的任務調度。但是,可以通過其他框架(如Quartz、Elastic-Job等)或自行實現分散式調度器,將任務調度器部署在多個節點上,然後通過分散式鎖、Zookeeper等方式協調多個節點之間的任務調度,實現分散式定時任務的管理和執行。
六、scheduled註解配置時間隨機
1、除了使用固定時間間隔或固定時間元素設定定時任務的執行時間,還可以使用隨機時間來實現間隔執行的任務。
2、可以使用Math.random()函數生成一個隨機的時間間隔,例如:
@Scheduled(fixedDelayString = "#{\"${random.int(5000)+5000}\":T}") public void execute() { //... }
3、上述示例中,使用SpEL表達式和配置文件中的random.int屬性創建一個隨機的時間間隔,範圍在5000ms~10000ms之間。
七、scheduled註解cron表達式
1、cron表達式中包含6個或7個時間元素欄位,分別表示從秒開始到周幾的時間單位。
2、每個時間元素欄位都可以設定多個取值或範圍,使用逗號或連接符進行分隔,例如「0 0 6,12,18 * * ?」表示每天早上6點、中午12點和晚上6點執行任務。
3、支持一些特殊符號,例如「L」表示最後一天,「#」表示第幾個周幾,例如「0 0 12 ? * WED#2」表示每月第二個周三中午12點執行。
八、scheduled註解不生效
1、scheduled註解不生效的原因可能有以下幾個方面:
2、首先,需要確保添加了@EnableScheduling註解啟用了任務調度器。
3、其次,需要確保定時任務的方法聲明為public、無參、void類型,並且標註了@Scheduled註解,例如:
@EnableScheduling @Configuration public class SchedulerConfig { @Scheduled(cron = "0 0 12 * * ?") public void execute() { //... } }
4、還需要確保定時任務的執行方法的許可權設置正確,例如不應該是private許可權。
九、scheduled註解每5分鐘
1、使用cron表達式可以設定任務的精確執行時間。例如,下面的示例表示每5分鐘執行一次:
@Scheduled(cron = "0 0/5 * * * ?") public void execute() { //... }
2、在cron表達式中,可以使用「/」符號設定時間間隔。例如「0/5」表示每5秒執行一次,「0 0/5 * * * ?」表示每5分鐘執行一次。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241891.html