簡單快捷優雅的實現乙個定時任務

2021-10-10 21:07:03 字數 3198 閱讀 5818

什麼場景

獲取token

最近也是遇到了一些煩惱,比如獲取 token ,一天內獲取的次數有限,每次獲取到的 token 也是有一定的有效期。針對這種情況,其實需要我們定時的去獲取token,並且重新整理到快取中,但是如果在多台機子的情況下,我們需要去做乙個分布式鎖,每次只保證有一台機子去獲取token。

單機實現生產消費

自己生產自己消費,其實就是一端往乙個佇列丟資料,另一端往佇列裡面消費資料,當然是阻塞佇列。當然這種情況下肯定不好的,因為操作都是基於記憶體的,重啟機子的時候會丟失資料。所以這種也只是針對 資料量不是持續的都有。一陣一陣的。那為什麼要用定時任務呢? 因為在消費一段,where(true) 去拿資料是不是會導致cpu巨高。所以一般都會使用定時任務,每個幾秒去看一下佇列裡面是否有資料。

怎麼簡單優雅的實現呢

下面就簡單的來乙個栗子。解釋一下 @postconstruct註解的作用,被註解的方法,建構函式之後,set執行之前執行。

/*** @author jzwen* @date 2020/11/25*/@servicepublic class taskservicepublic taskjob getjob()synchronized (taskjob.class)}return taskjob;}}
執行 job 執行緒

/*** @author jzwen* @date 2020/11/25*/public class taskjob implements runnable catch (interruptedexception e)system.out.println("執行任務結束-------------------");}}

執行結果

-----------start up----------------------end down------------2020-11-25 15:25:52.878  info 16864 --- [           main] o.s.b.w.embedded.tomcat.tomcatwebserver  : tomcat started on port(s): 8088 (http) with context path ''開始執行任務-------------------執行任務結束-------------------開始執行任務-------------------執行任務結束-------------------開始執行任務-------------------執行任務結束-------------------開始執行任務-------------------執行任務結束-------------------開始執行任務-------------------執行任務結束-------------------開始執行任務-------------------執行任務結束-------------------
job 有依賴,拿到的是null因為 @postconstruct註解的作用,被註解的方法,建構函式之後,set執行之前執行。所以如果當前類要是使用 @autowired 或者 @value 註解的屬性,拿到的是null。這點切記。怎麼解決這個呢,很簡單,在job的構造放裡面放入你的依賴,將依賴傳過去。如下,job 依賴 wxtemplatemsgservice

/*** @author jzwen* @date 2020/11/25*/@servicepublic class taskservicepublic taskjob getjob(wxtemplatemsgservice wxtemplatemsgservice)synchronized (taskjob.class)}return taskjob;}}
/*** @author jzwen* @date 2020/11/25*/public class taskjob implements runnable@overridepublic void run()  catch (exception e)system.out.println("執行任務結束-------------------");}}
最後一點,job 拋異常,定時任務會停止要是job裡面拋異常的話,整個定時任務會停止,所以一定要自己catch 異常並處理。

目前這個操作,我在公司還兩塊業務用到了,感覺比搭建什麼 quartz 更快,但是沒有他那麼靈活,對於業務量不大的服務可以使用這種方式。奧里給!!

歡迎小兄弟們關注我!!!!!

linux實現乙個定時任務

編寫指令碼 touch cleanlogs.sh bin sh find weblogic logs backend mtime 10 name log exec rm f 使用root使用者賦許可權,su 到root使用者下 chomd 777 cleanlogs.sh將該指令碼加入定時任務 vi...

定時任務配置 乙個簡單的定時任務排程中心設計方案

在日常開發中除了給前端開發介面,還要寫一些定時處理任務,比如乙個活動需要每天定時給所有使用者派發獎勵。乙個成熟服務框架需要乙個全域性的定時任務排程中心,通過定時任務排程中心可以檢視服務有哪些定時任務以及定時任務的執 況,對於執行失敗的定時任務可以手動執行等。我們公司的微服務架構沒有定時任務排程中心,...

乙個簡單 定時任務元件(quartz) demo

一 定時任務元件 quartz 1.應用場景 相當於鬧鐘,可以開發乙個或者多個定時任務 每天晚上12點生成當天的報表,第二天要看 訂單超時 延時傳送簡訊 2.定時任務元件quartz 概念和demo 1.quartz既可以單獨使用也可以跟spring框架整合使用,在實際開發中一般會使用後者。demo...