精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot下使用定時任務的方式全揭秘

新聞 前端
定時任務作為一種系統調度工具,在一些需要有定時作業的系統中應用廣泛,如每逢某個時間點統計數據、在將來某個時刻執行某些動作...

 

本文旨在用通俗的語言講述枯燥的知識

定時任務作為一種系統調度工具,在一些需要有定時作業的系統中應用廣泛,如每逢某個時間點統計數據、在將來某個時刻執行某些動作...定時任務在主流開發語言均提供相應的API供開發者調用,在Java中,實現定時任務有很多種方式,原生的方式實現一個完整定時任務需要由Timer、TimerTask兩個類,Timer是定時器類,用來按計劃開啟后臺線程執行指定任務,TimerTask一個抽象類,它的子類代表一個可以被Timer計劃的任務。除此之外,還可以用ScheduledExecutorService類或者使用第三方jar庫Quartz,其中Quartz是一個優秀的定時任務框架,發展至今已經非常成熟,以致后來其他的定時任務框架的核心思想或底層大多源于Quartz。

springboot作為Java的一種開發框架,在springboot項目中實現定時任務不僅可以使用Java提供的原生方式,還可以使用springboot提供的定時任務API,下面,小編把Java原生和springboot所有的實現定時任務的方式做一個整合。

文章提綱:
1、使用線程
2、使用Timer類
3、使用ScheduledExecutorService類
4、使用Quartz
5、使用spring的@Scheduled注解
6、cron表達式

1. 線程實現

利用線程可以設定休眠時間的方式可以實現簡單的定時任務邏輯。

  1. public static void main(String[] args){ 
  2.       //定時任務間隔時間 
  3.       int sleepTime=2*1000
  4.       new Thread(new Runnable() { 
  5.           @Override 
  6.           public void run() { 
  7.               while (true){ 
  8.                   try { 
  9.                       System.out.println("Thread方式執行一次定時任務"); 
  10.                       //線程休眠規定時間 
  11.                       Thread.sleep(sleepTime); 
  12.                   } catch (InterruptedException e) { 
  13.                       e.printStackTrace(); 
  14.                   } 
  15.               } 
  16.           } 
  17.       }).start(); 
  18.   } 

2. Timer類

Timer類允許調度一個TimerTask任務。使用這種方式可以讓你的程序按照某一個頻度執行。

  1. public static void main(String[] args){ 
  2.        int sleepTime=2*1000
  3.        TimerTask timerTask = new TimerTask() { 
  4.            @Override 
  5.            public void run() { 
  6.                System.out.println("Timer方式執行一次定時任務"); 
  7.            } 
  8.        }; 
  9.        new Timer().schedule(timerTask,1,sleepTime); 
  10.    } 

3. ScheduledExecutorService類

ScheduledExecutorService,是基于線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是并發執行,互不影響。
因此,基于ScheduledExecutorService類的定時任務類,歸根到底也是基于線程的調度實現的。

  1. public static void main(String[] args){ 
  2.      int sleepTime=2*1000
  3.      ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor(); 
  4.      scheduledExecutor.scheduleAtFixedRate( 
  5.              new Runnable() { 
  6.                  @Override 
  7.                  public void run() { 
  8.                      System.out.println("ScheduledExecutorService方式執行一次定時任務"); 
  9.                  } 
  10.              } 
  11.      ,1,sleepTime, TimeUnit.SECONDS); 
  12.  } 

4. 整合Quartz

Quartz是一個完全由Java編寫的開源作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制,要理解它的使用方式,需要先理解它的幾個核心概念:

1)Job: 表示一個工作,要執行的具體內容。此接口中只有一個方法,如下:

  1. void execute(JobExecutionContext context) 

2)JobDetail: 表示一個具體的可執行的調度程序,Job 是這個可執行程調度程序所要執行的內容,另外 JobDetail 還包含了這個任務調度的方案和策略。

3)Trigger: 代表一個調度參數的配置,什么時候去調。

4)Scheduler: 代表一個調度容器,一個調度容器中可以注冊多個 JobDetail 和Trigger。當 Trigger 與 JobDetail 組合,就可以被 Scheduler 容器調度了。

有了這些概念之后,我們就可以把Quartz整合到我們的springboot項目中了。

1. 引入quartz依賴

  1. <dependency> 
  2.    <groupId>org.springframework.boot</groupId> 
  3.    <artifactId>spring-boot-starter-quartz</artifactId> 
  4. </dependency> 

2.配置

  1. @Configuration 
  2. public class QuartzConfig { 
  3.     @Bean 
  4.     public JobDetail quartzDetail(){ 
  5.         return JobBuilder.newJob(QuartzTest.class).withIdentity("QuartzTest").storeDurably().build(); 
  6.     } 
  7.     @Bean 
  8.     public SimpleTrigger quartzTrigger(){ 
  9.         SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() 
  10.                 .withIntervalInSeconds(10
  11.                 .repeatForever(); 
  12.         return TriggerBuilder.newTrigger().forJob(quartzDetail()) 
  13.                 .withIdentity("QuartzTest"
  14.                 .withSchedule(scheduleBuilder) 
  15.                 .build(); 
  16.     } 

3. 測試

  1. public class QuartzTest extends QuartzJobBean { 
  2.     @Override 
  3.     protected void executeInternal(JobExecutionContext jobExecutionContext){ 
  4.         System.out.println("quartz執行一次定時任務 "); 
  5.     } 

5. 使用Scheduled注解

@Scheduled是spring為定時任務而生的一個注解,查看注解的源碼:

  1. @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. @Documented 
  4. @Repeatable(Schedules.class
  5. public @interface Scheduled { 
  6. //cron表達式 
  7.     String cron() default ""
  8. //接收一個java.util.TimeZone#ID。 
  9.     String zone() default ""
  10. //上一次執行完畢時間點之后多長時間再執行 
  11.     long fixedDelay() default -1
  12. //支持占位符形式的字符串類型的fixedDelay 
  13.     String fixedDelayString() default ""
  14. //上一次開始執行時間點之后多長時間再執行 
  15.     long fixedRate() default -1
  16. //支持占位符形式的字符串類型的fixedRateString 
  17.     String fixedRateString() default ""
  18. //頭一次延遲多長時間后再執行     
  19.     long initialDelay() default -1
  20. //支持占位符形式的字符串類型的initialDelay 
  21.     String initialDelayString() default ""

可以看出:Scheduled注解中的參數用來設置“定時”動作,通常情況下,比較常用的參數是cron(),這意味著我們需要學會一些cron表達式相關的語法,但由于內容較多,篇幅較長,在這里暫不鋪開講解,我們把cron語法相關放到文章結尾,在此先講解如何用Scheduled注解來實現定時任務。

1)開啟定時任務支持

  1. @SpringBootApplication 
  2. /** 
  3.  * 開啟定時任務支持 
  4.  */ 
  5. @EnableScheduling 
  6. public class TestApplication  extends SpringBootServletInitializer { 
  7.     public static void main(String[] args) { 
  8.         SpringApplication.run(TestApplication.class, args); 
  9.     } 
  10.     @Override 
  11.     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
  12.         return builder.sources(this.getClass()); 
  13.     } 

2)使用

  1. @Component 
  2. public class ScheduledTest { 
  3.     private Logger logger = LoggerFactory.getLogger(ScheduledTest.class); 
  4.     /** 
  5.      * 每15秒執行一次定時任務 
  6.      */ 
  7.     @Scheduled(cron = "0/15 * * * * ? "
  8.     public void testCron(){ 
  9.         logger.info("Scheduled 執行一次定時任務"); 
  10.     } 

6. cron表達式

cron表達式是一個字符串其語法為:

  1. [秒] [分] [小時] [日] [月] [周] [年] 

其中[年]為非必填項,因此通常cron表達式通常由6或7部分內容組成,內容的取值為數字或者一些cron表達式約定的特殊字符,這些特殊字符稱為“通配符”,每一個通配符分別代指一種值。cron表達式可以用這樣的表格來表示:

順序 取值范圍 特殊字符串范圍
0~60 , - * /
0~60 , - * /
0-23 , - * /
1-31 , - * /
1-12 / JAN-DEC , - * ? / L W
1-7 / SUN-SAT , - * ? / L #
年(可省略) 1970-2099 , - * /

 

其中通配符的解釋以及作用如下:

通配符 代表的值 解釋
* 所有值 如:時字段為*,代表每小時都觸發
不指定值 如:周字段為?,代表表達式不關心是周幾
- 區間 如:時字段設置2-5,代表2,3,4,5點鐘時都觸發
多個值 如:時字段設置2,3,5,代表2,3,5點都會觸發
/ 遞增值 如:時字段設置0/2,代表每兩個小時觸發,時字段設置 2/5,代表從2時開始每隔5小時觸發一次
L 最后值 如:日字段設置L,代表本月最后一天
W 最近工作日 如:在日字段設置13W,代表沒約13日最近的那個工作日觸發一次
# 序號 如:在周字段設置5#2,代表每月的第二個周五

  1. 示例: 
  2. 2秒執行一次:0/5 ? 
  3. 5分鐘執行一次:0 0/5 * ? 
  4. 1分、12分、45分執行一次:0 1,12,45 * ? 
  5. 每天235959秒執行一次:59 59 23 ? 
  6. 每月15號凌晨3點執行一次:0 0 3 15 * ? 
  7. 每月最后一天12點執行一次:0 0 12 L *  

 

 

責任編輯:張燕妮 來源: segmentfault.com
相關推薦

2024-09-20 05:49:04

SpringBoot后端

2021-06-30 07:19:34

SpringBoot定時任務

2009-10-28 10:05:29

Ubuntucrontab定時任務

2022-08-15 15:43:29

Linuxcron

2024-10-15 16:41:35

2024-07-31 14:03:00

Spring定時任務管理

2010-03-10 15:47:58

crontab定時任務

2025-01-08 09:55:37

Spring接口數據庫

2025-02-24 16:00:00

SpringBoot定時任務開發

2009-06-22 13:30:00

定時任務Java

2024-05-13 09:49:30

.NETQuartz庫Cron表達式

2024-02-28 09:54:07

線程池配置

2017-08-16 16:41:04

JavaSpringBoot定時任務

2012-02-07 13:31:14

SpringJava

2023-01-04 09:23:58

2024-09-09 08:11:12

2021-08-05 07:28:25

Java實現方式

2023-12-19 08:09:06

Python定時任務Cron表達式

2022-11-11 14:55:14

Linuxcron

2022-03-28 08:31:29

線程池定時任務
點贊
收藏

51CTO技術棧公眾號

成人免费av在线| 日韩激情在线| 91官网在线免费观看| 欧美在线3区| 亚洲图片在线播放| 欧美日韩ab| 亚洲美女在线看| 三上悠亚在线一区二区| 污视频在线看网站| 91尤物视频在线观看| 国产色视频一区| 国产主播在线播放| 欧美一区二区三| 精品国产亚洲一区二区三区在线观看| aⅴ在线免费观看| 免费超碰在线| 国产亚洲1区2区3区| 亚洲在线视频福利| 蜜臀99久久精品久久久久小说 | 国产理论在线| 国产精品久久久久久久岛一牛影视| 成人18视频| 91麻豆成人精品国产免费网站| 亚洲另类黄色| 欧美猛少妇色xxxxx| 亚洲ⅴ国产v天堂a无码二区| 国产精品毛片视频| 91精品国产综合久久精品麻豆 | 中文字幕电影av| 精品高清在线| 日韩精品免费看| 99久久综合网| 亚洲图片小说区| 日本韩国精品一区二区在线观看| 少妇高潮喷水在线观看| 日韩欧美一起| 亚洲欧美国产77777| 免费在线观看91| 四虎在线视频免费观看| 国产精品77777| 91亚洲精品久久久久久久久久久久| 无码aⅴ精品一区二区三区| 亚洲国产免费看| 久久久免费精品视频| 久久精品黄色片| 999精品一区| 正在播放亚洲1区| 亚洲激情图片网| 欧美猛男男男激情videos| 亚洲国产精品va在线看黑人动漫| 久久久久99人妻一区二区三区| 99视频这里有精品| 5858s免费视频成人| 加勒比av中文字幕| 亚洲综合伊人| 6080yy午夜一二三区久久| 日本激情综合网| 久久精品一二三四| 成年视频在线观看| 亚洲欧洲成人精品av97| 亚洲国产精品一区在线观看不卡 | 国产91精品入| 欧美xxxx老人做受| 超碰caoprom| 色婷婷综合久久久久久| 亚洲欧美日韩天堂一区二区| 性高潮久久久久久久| 激情五月综合| 日韩有码在线视频| 黄色一级视频在线观看| 精品成人国产| 日本91av在线播放| 日本一区二区三区久久| 韩国三级中文字幕hd久久精品| 日韩免费高清在线观看| 中文字幕在线观看国产| 国产乱对白刺激视频不卡| 国产精品一码二码三码在线| 日本精品一二区| 国产亚洲欧美日韩在线一区| 一区二区三区四区不卡| 亚洲图区一区| 日韩欧美999| 日韩免费高清在线| 国产aⅴ精品一区二区四区| 亚洲大胆人体视频| 国产精品20p| 91精品秘密在线观看| 久久久久久久久综合| 天堂а√在线中文在线新版| 另类的小说在线视频另类成人小视频在线 | 欧美舌奴丨vk视频| 欧美日韩日日骚| 亚洲美女精品视频| 久久不见久久见免费视频7| 中文字幕日韩欧美精品在线观看| 久热精品视频在线观看| 日韩欧美高清视频| 在线不卡视频一区二区| 污污影院在线观看| 色欧美片视频在线观看在线视频| 中文字幕中文在线| 嫩草国产精品入口| 日韩中文字幕免费视频| 欧美日韩国产综合在线| 国产欧美日韩综合精品一区二区三区 | 久久久高清一区二区三区| 永久久久久久| 欧美日韩不卡| 欧美白人最猛性xxxxx69交| 久久午夜福利电影| 影音先锋在线一区| 国产日韩亚洲欧美| 欧美一区二区三区少妇| 亚洲精品国产第一综合99久久| av黄色在线网站| 国产精品久久久久久久久久久久久久久 | 久草在线青青草| 亚洲国产欧美在线| www激情五月| 国产日产精品_国产精品毛片| 欧美日韩成人网| 中文字幕在线网站| 久久视频一区二区| 国产婷婷一区二区三区| 精品伊人久久| 最近的2019中文字幕免费一页| 天堂在线免费观看视频| 成人在线视频一区| 免费在线精品视频| 欧美亚洲黄色| 色阁综合伊人av| 艳妇乳肉豪妇荡乳av无码福利 | 中文字幕成在线观看| 日韩欧美一区二区不卡| 日韩av手机在线免费观看| 日本不卡的三区四区五区| 欧美另类视频在线| 亚洲精华液一区二区三区| 亚洲电影天堂av| 久久免费精彩视频| 国产成人精品免费网站| 国产日韩欧美大片| 久久国产精品免费一区二区三区| 久久精品国产综合| 99国产精品久久久久久久成人| 国产精品美女久久福利网站| www欧美激情| 日韩欧美大片| 成人福利在线观看| 老司机av在线免费看| 91麻豆精品国产91久久久久久| 182在线观看视频| 国产伦精品一区二区三区免费迷| 伊人久久av导航| 91麻豆精品| 欧美成在线观看| 亚洲精品成人区在线观看| 亚洲最好看的视频| 国产日本久久| 欧美性xxxxxxx| 中文字幕在线观看网址| 中国女人久久久| 麻豆av福利av久久av| 国产精品字幕| 最近2019年中文视频免费在线观看| 亚洲系列第一页| 樱花影视一区二区| 免费成人蒂法网站| 麻豆九一精品爱看视频在线观看免费| 人偷久久久久久久偷女厕| 懂色aⅴ精品一区二区三区| 久久五月情影视| 日本美女一级片| 色素色在线综合| 亚洲国产精品一区二区久久hs| 国产伦精一区二区三区| 国产69精品久久久久999小说| 婷婷精品在线| 国产欧美日韩中文字幕| 日本理论片午伦夜理片在线观看| 亚洲精品乱码久久久久久按摩观| 午夜一级黄色片| 亚洲激情综合网| 亚洲欧美日韩三级| 看黄网站在线观看| 欧美日韩国产综合一区二区| 成年人av电影| 91蝌蚪porny| 涩涩网站在线看| 亚洲三级免费| 一区二区三区四区| 秋霞影视一区二区三区| 91久久久久久| 久久青青视频| 色综合久久中文字幕综合网小说| 欧美日韩国产中文字幕在线| 欧美精品日日鲁夜夜添| 可以免费看的av毛片| 中文字幕字幕中文在线中不卡视频| 四虎永久免费观看| 久久精品国产亚洲一区二区三区| 亚洲人成无码网站久久99热国产 | 欧美激情黑白配| 亚洲丝袜自拍清纯另类| 一卡二卡三卡四卡| 久久99精品国产麻豆婷婷| 国产亚洲天堂网| 欧美日韩亚洲一区| 亚洲精品人成| 亚洲人成网亚洲欧洲无码| 不卡视频一区| 自拍偷拍欧美日韩| 国产999精品久久久影片官网| 自由的xxxx在线视频| 伊人精品在线观看| 免费黄色片在线观看| 日韩欧美国产精品一区| 在线观看黄色网| 色综合夜色一区| 久久精品免费在线| 亚洲免费av在线| 91导航在线观看| 国产亚洲精品中文字幕| 久久一区二区电影| 成人黄色网址在线观看| 超碰人人cao| 国产乱码精品一区二区三区av| 亚洲精品午夜在线观看| 久久久久久久波多野高潮日日| 国模精品一区二区三区色天香| 久久久人成影片一区二区三区| 国产精品白丝喷水在线观看| 国产午夜精品一区二区三区嫩草| 无码国产69精品久久久久网站| 国产在线精品一区二区三区不卡| 九热视频在线观看| 日韩福利视频网| 激情五月亚洲色图| 视频一区中文字幕国产| 国产精品久久久久久久免费大片| 在线观看毛片视频| 色综合久久88色综合天天免费| 精品成人久久久| 午夜一区二区三区在线观看| 日本少妇性生活| 午夜av一区二区三区| 国产无精乱码一区二区三区| 亚洲国产另类av| aaa人片在线| 欧美性生交xxxxxdddd| 天天干天天色综合| 欧美视频第二页| 在线播放一级片| 在线成人免费观看| 99热精品在线播放| 精品久久久久av影院| 欧美特黄一级视频| 亚洲精品网址在线观看| 成人在线播放视频| 色偷偷偷亚洲综合网另类| av免费在线观看网址| 欧美国产精品va在线观看| av免费不卡| 国产精品电影网站| 色狠狠一区二区三区| 7777精品伊久久久大香线蕉语言| 99久久香蕉| 欧美三级网色| 亚洲人metart人体| 欧美精品久久久久久久久久久| 午夜在线视频观看日韩17c| 国产主播在线看| 另类中文字幕网| 国产人妖在线观看| 久久精品亚洲麻豆av一区二区| 91制片厂在线| 亚洲国产精品视频| 91porny九色| 欧美一级xxx| 亚洲三级中文字幕| 日韩亚洲欧美中文高清在线| 亚洲淫性视频| 日韩av免费在线播放| 亚洲a成人v| 国产一区二区中文字幕免费看| 欧美男男gaytwinkfreevideos| 一本一本久久a久久精品综合妖精| 欧美日韩伊人| 亚欧在线免费观看| 国产宾馆实践打屁股91| 日韩人妻无码精品综合区| **网站欧美大片在线观看| 精品国产乱码一区二区| 欧美乱妇一区二区三区不卡视频| 少妇一级淫片免费看| 色播久久人人爽人人爽人人片视av| 黄色小说在线播放| 国产免费亚洲高清| 日韩精品免费一区二区三区竹菊 | 色135综合网| 国模无码视频一区二区三区| 狠狠色丁香九九婷婷综合五月| 网站免费在线观看| 亚洲激情中文1区| 精品乱码一区内射人妻无码| 亚洲精品一区二区三区在线观看| 91caoporn在线| 奇米一区二区三区四区久久| 在线一区二区三区视频| 亚洲va久久久噜噜噜久久狠狠| 亚洲成人资源| 一区二区三区人妻| 国产精品国产三级国产三级人妇| √资源天堂中文在线| 欧美大片国产精品| 日本在线免费看| 国产精品扒开腿做爽爽爽视频 | 中文字幕一区二区三区5566| 免费久久99精品国产自在现线| 黄瓜视频免费观看在线观看www | 亚洲欧美视频在线观看视频| www.久久久久久久| 亚洲第一区第一页| av网站网址在线观看| 国产日韩中文字幕| 日本不卡免费一区| 国产熟人av一二三区| 337p粉嫩大胆噜噜噜噜噜91av | 国产综合动作在线观看| 欧美日韩精品| 日韩久久久久久久久久久| 国产精品看片你懂得| 中文字幕一区二区三区人妻四季 | а√天堂官网中文在线| 国产精品视频区1| 欧美视频网址| 亚洲 欧美 另类人妖| 欧美高清在线一区| 中文字幕精品在线观看| 国产一区二区三区精品久久久 | 亚洲人www| 色哟哟无码精品一区二区三区| 亚洲综合偷拍欧美一区色| 国产有码在线观看| 蜜月aⅴ免费一区二区三区| 精品国产乱码久久久久久樱花| 异国色恋浪漫潭| 国产一区不卡在线| 国产欧美日韩在线播放| 日韩欧美国产另类| 久久亚洲风情| 亚洲高清av一区二区三区| 亚洲天堂福利av| 国产91视频在线| 色综合男人天堂| 极品尤物一区| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久综合九色综合97_久久久| 亚洲精品午夜国产va久久成人| 亚洲欧洲黄色网| 国产69精品久久久久9999人| 偷拍盗摄高潮叫床对白清晰| 国产福利一区在线| 日韩欧美亚洲一区二区三区| 亚洲男子天堂网| 国产一区二区在线视频观看| 亚洲精品欧美激情| 国产三级三级在线观看| 欧美黄色片免费观看| 婷婷成人综合| 在线播放av中文字幕| 亚洲国产成人porn| 青青青草网站免费视频在线观看| 国产精品第七影院| 欧美1区2区| 熟女俱乐部一区二区视频在线| 欧美日韩三级一区二区| 神马午夜伦理不卡| 久久久综合香蕉尹人综合网| 捆绑紧缚一区二区三区视频| 久久久久久久久久久网| 亚洲性视频网站| 欧洲一区在线| 无码人妻丰满熟妇区毛片| 亚洲精品美腿丝袜| 日本亚洲一区| 亚洲伊人久久综合| 国产精品老牛| av成人免费网站| 亚洲日本欧美中文幕| 日本一区二区三区电影免费观看| 男人日女人bb视频| 亚洲欧美激情视频在线观看一区二区三区| 日本波多野结衣在线| 国产在线拍揄自揄视频不卡99| aa级大片欧美三级| 亚洲熟女www一区二区三区| 亚洲精品自产拍| 波多野结衣欧美|