springboot的@Scheduled註解可以很快速完成咱們須要的定時任務.spring
代碼以下:springboot
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Configuration @Component @EnableScheduling public class UserTypeUpdateJob { SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); /*每100秒執行一次*/ @Scheduled(fixedRate = 100000) public void timerRate() { System.out.println("我是:timerRate"); } /*第一次10秒後執行,當執行完後2秒再執行*/ @Scheduled(initialDelay = 10000, fixedDelay = 2000) public void timerInit() { System.out.println("init : "+dateFormat.format(new Date())); } /*天天15:39:00時執行*/ @Scheduled(cron = "0 39 15 * * ? ") public void timerCron() { System.out.println("current time : "+ dateFormat.format(new Date())); } }
其中須要注意的是:fixedRate和fixedDelay這兩個參數開始計時的時間不同.若是須要調用的方法執行時間比較長, 這時差異就能體現出來.app
fixedRate:上一次開始執行時間點後再次執行;spa
fixedDelay:上一次執行完畢時間點後再次執行;.net
還能夠將執行執行頻率、cron表達式放到application.properties中 調用以下code
@Scheduled(fixedDelayString = "${jobs.fixedDelay}") public void getTask1() { System.out.println("任務1,從配置文件加載任務信息,當前時間:" + dateFormat.format(new Date())); }
經常使用Cron表達式orm
0 10,14,16 * * ? 天天上午10點,下午2點,4點
0/30 9-17 * * ? 朝九晚五工做時間內每半小時
0 12 ? * WED 表示每一個星期三中午12點
"0 0 12 * * ?" 天天中午12點觸發
"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觸發
"0 15 10 ? * *" 天天上午10:15觸發
"0 15 10 * * ?" 天天上午10:15觸發
"0 15 10 * * ? *" 天天上午10:15觸發
"0 15 10 * * ? 2005" 2005年的天天上午10:15觸發
Cron表達式在線生成器blog