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

熱乎乎的面經:Spring中Scheduled和Async兩種調度方式有啥區別?

開發 架構
最近有小伙伴出去面試,回來跟我說:冰河,我去XXX公司面試,面試官竟然問了我一個關于Spring中Scheduled和Async調度的問題,我竟然沒回答上來,你能不能寫一篇關于這個問題的文章呢?我:可以,安排上!于是便有了這篇文章。

[[396421]]

大家好,我是冰河~~

最近有小伙伴出去面試,回來跟我說:冰河,我去XXX公司面試,面試官竟然問了我一個關于Spring中Scheduled和Async調度的問題,我竟然沒回答上來,你能不能寫一篇關于這個問題的文章呢?我:可以,安排上!于是便有了這篇文章。

好了,我們開始正文吧~~

Spring調度的兩種方式

Spring提供了兩種后臺任務的方法,分別是:

  • 調度任務,@Schedule
  • 異步任務,@Async

當然,使用這兩個是有條件的,需要在spring應用的上下文中聲明當然,如果我們是基于java配置的,需要在配置類上加@EnableScheduling和@EnableAsync注解,例如,下面的代碼片段。

  1. @EnableScheduling 
  2. @EnableAsync 
  3. public class WebAppConfig { 
  4.    .... 
  5. } 

除此之外,還是有第三方庫可以調用的,例如Quartz,文章最后我們再簡單提下Quartz。

@Schedule調度

先看下@Schedule怎么調用再說。

  1. public final static long ONE_DAY = 24 * 60 * 60 * 1000; 
  2. public final static long ONE_HOUR = 60 * 60 * 1000; 
  3.   
  4. @Scheduled(fixedRate = ONE_DAY) 
  5. public void scheduledTask() { 
  6.    System.out.println(" 我是一個每隔一天就會執行一次的調度任務"); 
  7.   
  8. @Scheduled(fixedDelay = ONE_HOURS) 
  9. public void scheduleTask2() { 
  10.     System.out.println(" 我是一個執行完后,隔一小時就會執行的任務"); 
  11.   
  12. @Scheduled(initialDelay=1000, fixedRate=5000) 
  13. public void doSomething() { 
  14.     // something that should execute periodically 
  15.   
  16. @Scheduled(cron = "0 0/1 * * * ? "
  17. public void ScheduledTask3() { 
  18.     System.out.println(" 我是一個每隔一分鐘就就會執行的任務"); 

需要注意的是:

  • 關于@Scheduled注解,里面使用的是Cron表達式,同時我們看到了兩個不一樣的面孔fixedDelay& fixedRate,前者fixedDelay表示在指定間隔運行程序,例如這個程序在今晚九點運行程序,跑完這個方法后的一個小時,就會再執行一次,而后者fixedDelay是指,這個函數每隔一段時間就會被調用(我們這里設置的是一天),不管再次調度的時候,這個方法是在運行還是結束了。而前者就要求是函數運行結束后開始計時的,這就是兩者區別。
  • 這個還有一個initialDelay的參數,是第一次調用前需要等待的時間,這里表示被調用后的,推遲一秒再執行,這適合一些特殊的情況。
  • 我們在serviceImpl類寫這些調度任務時候,也需要在ServiceInterface的接口口中寫多個接口,不然會拋出but not found in any interface(s) for bean JDK proxy.Either pull the method up to an interface or 的異常。

@Async調度

有時候我們會調用一些特殊的任務,任務會比較耗時,重要的是,我們不管他返回的后果。這時候我們就需要用這類的異步任務啦,調用后就讓它去跑,不堵塞主線程,我們繼續干別的。代碼像下面這樣:

  1. public void AsyncTask(){ 
  2.     @Async 
  3.     public void doSomeHeavyBackgroundTask(int sleepTime) { 
  4.         try { 
  5.             Thread.sleep(sleepTime); 
  6.         } catch (InterruptedException e) { 
  7.             e.printStackTrace(); 
  8.         } 
  9.     } 
  10.     @Async 
  11.     public Future<String> doSomeHeavyBackgroundTask() { 
  12.         try { 
  13.             Thread.sleep(3000); 
  14.         } catch (InterruptedException e) { 
  15.             e.printStackTrace(); 
  16.         } 
  17.         return null
  18.     } 
  19.       
  20.     public void printLog() { 
  21.          System.out.println(" i print a log ,time=" + System.currentTimeMillis()); 
  22.     } 
  23.   

我們寫個簡單的測試類來測試下

  1. @RunWith(SpringJUnit4ClassRunner.class) 
  2. @WebAppConfiguration 
  3. @ContextConfiguration(classes = AsycnTaskConfig.class) //要聲明@EnableASync 
  4. public class AsyncTaskTest { 
  5.     @Autowired 
  6.     AsyncTask asyncTask; 
  7.     @Test 
  8.     public void AsyncTaskTest() throws InterruptedException { 
  9.         if (asyncTask != null) { 
  10.             asyncTask.doSomeHeavyBackgroundTask(4000); 
  11.             asyncTask.printLog(); 
  12.             Thread.sleep(5000); 
  13.         } 
  14.     } 

這感覺比我們手動開線程方便多了,不想異步的話直接把@Async去掉就可以了,另外如果想要返回結果,需要使用Future<>接口。如果想修改Spring Boot的默認線程池配置,可以實現AsyncConfigurer。

需要注意的是:

  • 相對于@scheduled,這個可以有參數和返回個結果,因為這個是我們調用的,而調度的任務是spring調用的。
  • 異步方法不能內部調用,只能像上面那樣,外部調用,否則就會變成阻塞主線程的同步任務啦!這里,給大家展示一個活生生的大坑!例如下面的代碼案例。
  1. public void AsyncTask(){ 
  2.     public void fakeAsyncTaskTest(){ 
  3.         doSomeHeavyBackgroundTask(4000); 
  4.         printLog(); 
  5.         //你會發現,當你像這樣內部調用的時候,居然是同步執行的,不是異步的!! 
  6.     } 
  7.       
  8.     @Async 
  9.     public void doSomeHeavyBackgroundTask(int sleepTime) { 
  10.         try { 
  11.             Thread.sleep(sleepTime); 
  12.         } catch (InterruptedException e) { 
  13.             e.printStackTrace(); 
  14.         } 
  15.     } 
  16.       
  17.     public void printLog() { 
  18.         System.out.println(" i print a log "); 
  19.     } 

另外一點就是不要重復的掃描,這也會導致異步無效,具體的可以看這個stackoveflow的spring-async-not-working Issue。

關于異常處理,難免在這個異步執行過程中有異常發生,對于這個問題,Spring提供的解決方案如下,實現 AsyncUncaughtExceptionHandler接口。

  1. public class MyAsyncUncaughtExceptionHandler implements AsyncUncaughtExceptionHandler { 
  2.     @Override 
  3.     public void handleUncaughtException(Throwable ex, Method method, Object... params) { 
  4.         // handle exception 
  5.     } 

寫好我們的異常處理后,我們需要配置一下,告訴Spring,這個異常處理就是我們在運行異步任務時候,拋出錯誤時的異常終結者。

  1. @Configuration 
  2. @EnableAsync 
  3. public class AsyncConfig implements AsyncConfigurer { 
  4.     @Bean 
  5.     public AsyncTask asyncBean() { 
  6.         return new AsyncTask(); 
  7.     } 
  8.       
  9.     @Override 
  10.     public Executor getAsyncExecutor() { 
  11.         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
  12.         executor.setCorePoolSize(7); 
  13.         executor.setMaxPoolSize(42); 
  14.         executor.setQueueCapacity(11); 
  15.         executor.setThreadNamePrefix("MyExecutor-"); 
  16.         executor.initialize(); 
  17.         return executor; 
  18.     } 
  19.       
  20.     @Override 
  21.     public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { 
  22.          return new MyAsyncUncaughtExceptionHandler(); 
  23.     } 

簡單聊下Quartz登場

Spring中除了@Scheduled和@Async注解外,還有一個和Spring整合的第三方庫叫Quartz,看了下官網的使用簡介,也是挺逗的,現在都習慣用Maven,Gradle之類來關系這些依賴了,他還叫人下載,也是不知為何,詳情點擊->http://quartz-scheduler.org/documentation/quartz-2.2.x/quick-start

估計有可能是因為沒再維護了的原因吧,看了下,最新版2.2居然是Sep, 2013更新的…

Quartz居然是停更了,不過Quartz作為一個企業級應用的任務調度框架,還是一個可以的候選項目,作為其他方案的兜底方案。

 

這里不鋪開講,有興趣的小伙伴們就去官網看下吧。整體用起來感覺是沒有Spring自己的后臺任務方便,不過也可以接受,只需要簡單的配置就可以使用了。

本文轉載自微信公眾號「冰河技術  」,可以通過以下二維碼關注。轉載本文請聯系冰河技術 公眾號。

 

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2020-05-11 15:15:24

騰訊后端數據庫面試真題

2016-11-07 09:02:02

Malloc內存syscall

2009-09-08 15:22:20

Spring依賴注入

2009-06-23 18:18:13

SpringHibernate

2012-12-24 13:30:34

iOS

2022-07-01 18:13:51

MPPHadoop大數據

2009-06-15 15:02:48

Spring定時器

2014-01-07 14:29:14

HadoopYARN

2010-03-18 10:18:52

python模塊

2009-12-25 16:46:08

2011-08-08 14:13:47

iPhone XML NSXMLParse

2011-03-03 10:26:04

Pureftpd

2020-02-21 17:33:17

SparkKafka數據

2022-01-12 09:31:18

Go 變量方式

2010-03-16 15:23:32

java動態載入

2015-05-06 10:05:22

javajava框架spring aop

2021-05-27 10:57:01

TCP定時器網絡協議

2009-07-30 15:09:44

asp.net中Bin

2020-06-18 08:18:35

密碼加密安全

2009-06-25 13:43:00

Buffalo AJA
點贊
收藏

51CTO技術棧公眾號

激情五月综合色婷婷一区二区 | 亚洲美女综合网| 中文在线播放一区二区| 亚洲福利在线视频| 无码日韩人妻精品久久蜜桃| 女女色综合影院| 99在线视频精品| 国产剧情久久久久久| 精品无码人妻一区二区三区品| 夜夜春成人影院| 欧美一区日韩一区| 日韩无套无码精品| 国产一区久久精品| 久久精品视频一区二区| 亚洲影院污污.| aaa在线视频| 午夜精品一区二区三区在线| 日韩av高清在线看片| 91精品国产91久久久久游泳池 | 国产精品一区二区三区在线播放 | 国产欧美日韩伦理| 伊人久久一区二区| 免费久久99精品国产自在现线| 日韩中文字幕在线| 国产手机在线观看| 精品久久97| 欧美一区二区三区喷汁尤物| 欧美成人精品欧美一级乱| 青青草视频在线免费直播| 国产精品欧美一级免费| 国产自产精品| 亚洲国产成人在线观看| 国产在线国偷精品产拍免费yy| 热99在线视频| 欧美激情亚洲综合| 国产综合网站| 欧美成人精品一区二区| 婷婷丁香综合网| 国产一区二区精品福利地址| 国产视频在线一区二区| 黑人巨大猛交丰满少妇| 亚洲网站免费| 欧美日韩国产综合一区二区三区| 日韩一级在线免费观看| 欧美四级在线| 亚洲精品乱码久久久久久日本蜜臀| 亚洲日本理论电影| 国产一二三区在线视频| 久久久久久久久久久电影| 农村寡妇一区二区三区| 亚洲av成人精品日韩在线播放| 国产99久久久国产精品潘金网站| 亚洲综合第一页| 国产高清在线观看视频| 国产成人av电影| 操人视频欧美| 亚洲精品喷潮一区二区三区| 国产成人精品综合在线观看 | www.我爱av| 国产美女一区二区三区| 亚洲综合中文字幕68页| 99热这里只有精品99| 亚洲网站免费观看| 欧美另类综合| 久久久久久久久久国产精品| 久久久全国免费视频| 好吊日精品视频| 78色国产精品| 中文字幕精品视频在线观看| 日本欧美大码aⅴ在线播放| 国产精品免费久久久| 亚洲一级在线播放| 国产精品主播直播| 国产乱人伦精品一区二区| 天堂资源中文在线| 国产欧美日韩不卡| 91精品一区二区三区四区| 毛片在线网址| 色婷婷综合久久久久中文一区二区 | 成人免费福利视频| 国产国语亲子伦亲子| 波多野结衣在线aⅴ中文字幕不卡| 久久久久一区二区三区| 搞黄视频在线观看| 亚洲精品久久7777| 精品一区二区中文字幕| 久久精品资源| 亚洲福利在线视频| 亚洲AV成人无码网站天堂久久| 欧美一区二区三区久久精品茉莉花| 久久免费成人精品视频| 中文字幕一区二区三区四区欧美| 国内欧美视频一区二区| 精品久久久久亚洲| 日本网站在线免费观看视频| 性久久久久久久久久久久 | 精品一区二区av| 国产伦精品一区二区三区视频免费| 韩国中文免费在线视频| 亚洲精品午夜久久久| 无码人妻丰满熟妇区毛片18| 日韩一区二区三区四区五区 | 免费福利在线观看| 亚洲免费看黄网站| 欧美在线观看视频网站| 日韩成人久久| 色噜噜狠狠狠综合曰曰曰88av| 国产无码精品在线观看| 免费欧美在线视频| 精品国产区在线| 性欧美videoshd高清| 欧美在线不卡一区| 亚洲av无码一区二区三区观看| 五月婷婷六月综合| 国产精品99久久久久久人 | 久久久精品欧美| 四虎精品永久在线| 成人中文字幕合集| 成年人黄色在线观看| 粉嫩一区二区三区| 亚洲国产美女久久久久| 天天综合天天做| 麻豆精品在线视频| 日本一区免费在线观看| 少妇在线看www| 精品美女在线观看| 欧美黑吊大战白妞| 国产一区二区免费视频| 亚洲精品自在在线观看| 欧美一区 二区 三区| 日韩精品视频在线| 日本三级视频在线| 成人精品gif动图一区| 在线观看18视频网站| 亚洲精品大片| 爱福利视频一区| 在线观看国产区| 久久久久综合网| 国产精品后入内射日本在线观看| 三级欧美日韩| 久99久在线视频| 精品人妻一区二区三区麻豆91 | 色综合天天色| 亚洲日本成人网| 极品国产91在线网站| 91啦中文在线观看| 成人免费观看视频在线观看| 欧美一区 二区| 性欧美xxxx视频在线观看| 色网站免费观看| 婷婷久久综合九色综合伊人色| 欧美久久久久久久久久久| 欧美阿v一级看视频| 999在线免费观看视频| 中文在线观看免费| 亚洲成**性毛茸茸| 日本韩国欧美中文字幕| 久久久久亚洲综合| 超碰超碰在线观看| 91精品动漫在线观看| 91视频网页| 99爱在线观看| 亚洲日韩中文字幕| 一本到在线视频| 亚洲精品免费在线观看| 性色av蜜臀av浪潮av老女人| 亚洲欧美日本日韩| 先锋影音网一区| 国产精久久一区二区| 欧美黑人国产人伦爽爽爽| 日批视频在线播放| 色成年激情久久综合| 国产成人在线网址| 国产高清精品网站| 91九色在线观看视频| 精品国精品国产自在久国产应用| 91精品国产综合久久香蕉的用户体验| 成人在线视频亚洲| 亚洲乱码国产乱码精品精| 波多野结衣激情视频| 日韩理论片在线| 在线精品一区二区三区| 日本中文在线一区| 777久久精品一区二区三区无码| 欧美色图婷婷| 国产在线观看91精品一区| 成人性生交大片免费看在线播放| 亚洲精品视频久久| 手机精品视频在线| av亚洲在线| 欧美视频一二三| 精品无码一区二区三区蜜臀| 不卡视频一二三四| 国产又大又黄又猛| 亚洲精品字幕| www亚洲国产| 日韩理论电影中文字幕| 国产精品视频99| 超碰97免费在线| 中文国产亚洲喷潮| 日韩在线视频免费| 欧美日韩精品欧美日韩精品一| 精品国产乱码久久久久久鸭王1| www国产成人| 国产91在线免费观看| 玖玖精品视频| 野外做受又硬又粗又大视频√| 国产一区二区精品福利地址| 国产另类自拍| 国产精选久久| 国产精品va在线播放我和闺蜜| 中文字幕伦理免费在线视频 | 欧美成年黄网站色视频| 日韩精品亚洲元码| 午夜精品久久久久久久99热黄桃| 欧洲人成人精品| 日韩欧美亚洲一区二区三区| 日韩理论在线观看| 国产精品无码一区二区三区| 国产成人免费av在线| 日韩成人精品视频在线观看| 亚洲欧美日韩一区在线观看| 欧美精品在欧美一区二区| 色爱综合网欧美| 日本精品一区二区| 天堂俺去俺来也www久久婷婷| 99一区二区| 高清一区二区三区av| 国产啪精品视频| 日本少妇一区| 青青在线视频一区二区三区| 9999在线视频| 久久久久亚洲精品成人网小说| 黄色成人在线观看| 久久久国产一区二区| 日本在线免费中文字幕| 综合国产在线视频| seseavlu视频在线| 中文字幕日韩有码| 超碰免费在线| 自拍视频国产精品| 欧美精品videos另类| 日韩在线观看视频免费| av男人的天堂在线| 中日韩美女免费视频网址在线观看 | 小泽玛利亚av在线| 中文字幕亚洲综合久久五月天色无吗'' | 欧洲一区av| 亚洲欧美变态国产另类| 三级视频在线| 亚洲欧洲国产精品| 国产女主播av| 国产精品香蕉| 黑人另类av| 欧美亚洲国产日韩| 热re99久久精品国99热蜜月| 欧美理论在线播放| 亚洲视频精品一区| 牛夜精品久久久久久久99黑人| 亚洲av综合色区| 中文视频一区| 国产美女主播在线| 国产精品久久久亚洲一区| 国产男女在线观看| 日韩电影免费一区| 99国产精品久久久久久| 国产在线观看一区二区| 五月天丁香社区| www国产成人| 天堂av免费在线| 亚洲一区二区三区小说| 日本少妇在线观看| 色悠悠亚洲一区二区| 中文字字幕在线中文乱码| 欧美一区二区三区色| 亚洲精品网站在线| 亚洲乱码国产乱码精品精天堂| 北岛玲一区二区三区| 久久精品国产91精品亚洲| 成人av影院在线观看| 日本人成精品视频在线| 久久亚洲精品中文字幕| 99久久久精品免费观看国产| 日韩高清电影免费| 亚洲午夜精品久久久久久浪潮| 你懂的一区二区| 成人羞羞国产免费网站| 国产成人午夜高潮毛片| 国产黄色网址在线观看| 自拍偷拍亚洲综合| 男人日女人网站| 日韩一区二区视频| 九色网友自拍视频手机在线| 久久综合88中文色鬼| 91桃色在线| 成人xxxxx| 蜜桃一区二区三区| 狠狠干视频网站| 视频一区视频二区中文字幕| √天堂资源在线| 国产免费观看久久| 草久视频在线观看| 欧美一二三四在线| yes4444视频在线观看| 久久久免费电影| 国产精品一区二区美女视频免费看 | 亚洲**2019国产| 97色婷婷成人综合在线观看| 久久亚洲综合网| 亚洲二区精品| www.日本久久| 国产精品视频麻豆| av网站中文字幕| 亚洲电影免费观看高清完整版在线观看 | 色综合久综合久久综合久鬼88 | 欧美激情成人动漫| 国产欧美最新羞羞视频在线观看| 欧美重口另类| 精品丰满人妻无套内射| 国产麻豆精品在线观看| 亚洲一级理论片| 欧洲一区在线观看| 欧洲毛片在线| 97在线日本国产| 91夜夜蜜桃臀一区二区三区| 中文字幕一区二区三区精彩视频| 久久久久久穴| 国产黄色网址在线观看| 精品久久久久久中文字幕大豆网| 精品人妻一区二区三区麻豆91| 久久精品国产一区| 福利一区二区免费视频| 任我爽在线视频精品一| 狂野欧美性猛交xxxx巴西| 欧美熟妇精品黑人巨大一二三区| 亚洲成人av福利| 欧美 日韩 综合| 国模精品系列视频| 国产66精品| 精品少妇人妻av免费久久洗澡| 懂色av一区二区夜夜嗨| 国产在线视频99| 精品美女一区二区三区| av影视在线| 久久精品日产第一区二区三区 | 69av在线视频| 玖玖玖免费嫩草在线影院一区| 黄页网站在线观看视频| 99精品国产热久久91蜜凸| 五月天综合激情网| 亚洲香蕉伊综合在人在线视看| 欧美亚洲韩国| 婷婷久久五月天| 精品一区二区三区影院在线午夜| 暗呦丨小u女国产精品| 91精品国产一区二区三区香蕉| gogo在线高清视频| 国产精品推荐精品| 国产亚洲永久域名| 人妻aⅴ无码一区二区三区| 欧美午夜不卡视频| 国产激情小视频在线| 99久久99久久精品国产片| 国产视频欧美| 免费网站在线高清观看| 欧美精品在线一区二区| 日韩av毛片| 久久综合九色欧美狠狠| 日本成人在线视频网站| 日本二区三区视频| 精品粉嫩超白一线天av| 亚洲男人av| 伊人久久大香线蕉成人综合网 | 日本高清www| 欧美日韩在线播| 日本在线视频www鲁啊鲁| 蜜桃成人在线| 国产一区二区三区日韩| 国产精品suv一区二区三区| 色先锋资源久久综合5566| 日韩三级不卡| 每日在线更新av| 国产精品的网站| 天天插天天干天天操| 国产精品久久综合av爱欲tv| 欧美韩国一区| 熟女少妇内射日韩亚洲| 日韩欧美国产三级电影视频| 亚洲最大成人| 亚洲高潮无码久久| 久久夜色精品国产欧美乱极品| 在线视频免费观看一区| 欧美黄色片免费观看| 精品美女久久久| 久久久久亚洲av成人网人人软件| 欧洲精品视频在线观看| 高清电影在线观看免费| 一区二区不卡在线观看| 91麻豆国产在线观看| 国产欧美日韩成人|