這篇文章主要介紹了怎么使用Quartz實現Java高可用定時任務的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么使用Quartz實現Java高可用定時任務文章都會有所收獲,下面我們一起來看看吧。
網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、重慶小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了尉犁免費建站歡迎大家使用!
如果你想做定時任務,有高可用
方面的需求,或者僅僅想入門快
,上手簡單,那么選用它準沒錯。
定時任務模塊是對Quartz框架進一步封裝,使用更加簡潔。
<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-quartz</artifactId> <version>1.5.4.1</version> </dependency>
實現org.quartz.Job
接口;使用注解CronExp
添加任務的調度策略;使用注解Component
將任務注入容器中。
啟動項目,定時任務便處于監聽與運行中。
@Component @DisallowConcurrentExecution @CronExp(cron = "0/5 * * * * ?") public class DemoJob implements Job { @Override public void execute(JobExecutionContext context) { System.out.println("任務1:" + LocalDateTime.now()); } }
定時任務除了以既有頻率周期性運行外,還有通過接口手動被觸發的能力。
調用如下接口,可手動觸發任務ID編號為jobId
的任務。
http://localhost:8080/cms-api/quartz/job/{jobId}
如果有手動觸發定時任務的需求,則需要任務ID唯一并
且已知
,因此需要在編寫定時任務時手動指定。
@CronExp(id = 1, cron = "0/5 * * * * ?")
通過注解CronExp
的id屬性可指定任務ID,不顯示指定則使用隨機ID,不滿足已知的條件,因此無法手動觸發。
盡管大多數任務不需要注入參數,但仍有少量的場景需要向定時任務注入參數。
public void execute(JobExecutionContext context) { /* 如果在調用任務時傳入了參數,則能夠從Map中獲取 */ Map<String, Object> dataMap = context.getMergedJobDataMap(); /* 比如從Map中獲取一個鍵值對,一般來說參數均為基本數據類型 */ Object key = dataMap.get("key"); System.out.println("任務2:" + LocalDateTime.now() + ": " + key); }
在編寫定時任務時,可從JobExecutionContext
對象中解析一個Map,從而完成參數的注入。
http://localhost:8080/cms-api/quartz/job/1?key=a
上述http調用的含義是手動觸發任務ID為【1】的任務,并且向其傳遞參數為【key】值為【a】的參數。
本框架不支持任務并發,換句話說并發對定時任務不利,因此需要手動禁止。
需要注意的是Quartz
的并發是指當任務執行耗時超過任務調度周期時,上一個任務未執行完,新任務是否執行。
一般來說需要顯示禁止并發,在任務類上添加注解DisallowConcurrentExecution
即可禁止任務并發。
如果定時任務有高可用的需求,那么需要對任務進行持久化。定時任務數據持久化到數據庫中后,支持應用程序多開。定時任務持久化多節點部署后,集群中單節點故障不影響定時任務的執行。
定時任務持久化,僅需修改yml文件配置即可達到目標,無需修改代碼。一般而言使用MySQL做持久化的容器。
spring: quartz: properties: org.quartz.jobStore.isClustered: true org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource: qzDS org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo org.quartz.dataSource.qzDS.user: root org.quartz.dataSource.qzDS.password: 123456
除了修改主機、端口、數據庫名、用戶名、密碼五個參數外,其余參數使用默認值即可。
配置完數據庫連接后,使用SQL腳本,注意初始化數據庫
關于“怎么使用Quartz實現Java高可用定時任務”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么使用Quartz實現Java高可用定時任務”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道。
文章題目:怎么使用Quartz實現Java高可用定時任務
網站URL:http://vcdvsql.cn/article16/gjdedg.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、虛擬主機、品牌網站建設、網站排名、網站制作、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯