<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
如果你想做定時任務,有高可用方面的需求,或者僅僅想入門快,上手簡單,那麼選用它準沒錯。
定時任務模組是對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高可用定時任務的快速上手的文章就介紹到這了,更多相關Quartz高可用定時任務內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45