《零基礎學Java》 資料庫操作 資料庫基礎 資料庫是一種存儲結構,允許使用各種格式 輸入、處理、檢索 數據,且不用在每次需要數據時重新輸入數據。 select 語句: select語句用於查詢數據表中的數據。 select 語句 語法: select 所選欄位列表 from 數據表名 where ...
一、為什麼需要任務調度平臺
在Java中,傳統的定時任務實現方案,比如Timer,Quartz等都或多或少存在一些問題:
- 不支持集群、不支持統計、沒有管理平臺、沒有失敗報警、沒有監控等等而且在現在分散式的架構中,有一些場景需要分散式任務調度:
- 同一個服務多個實例的任務存在互斥時,需要統一的調度。任務調度需要支持高可用、監控、故障告警。
- 需要統一管理和追蹤各個服務節點任務調度的結果,需要記錄保存任務屬性信息等。顯然傳統的定時任務已經不滿足現在的分散式架構,所以需要一個分散式任務調度平臺,目前比較主流的是elasticjob和xxl-job。
二、為什麼選擇XXL-JOB
xxl-job中心式的調度平臺輕量級,開箱即用,操作簡易,上手快,與SpringBoot有非常好的集成,而且監控界面就集成在調度中心,界面又簡潔,對於企業維護起來成本不高,還有失敗的郵件告警等等。這就使很多企業選擇xxl-job做調度平臺。
三、快速入門
具體安裝參照官方文檔,官方是最靠譜的
https://www.xuxueli.com/xxl-job/
這裡主要記錄一下XXL-JOB有2塊,
一是調度中心,需要配置,建議獨立部署
- 參考其官方demo調度中心項目:xxl-job-admin
- 作用:統一管理任務調度平臺上調度任務,負責觸發調度執行,並且提供任務管理平臺。
參考其官方文檔 2.3 配置部署“調度中心”
另一塊就是 【執行器】,參考官方文檔 2.4 配置部署“執行器項目”
- “執行器”項目:xxl-job-executor-sample-springboot (提供多種版本執行器供選擇,現以 springboot 版本為例,可直接使用,也可以參考其並將現有項目改造成執行器)
- 作用:負責接收“調度中心”的調度並執行;可直接部署執行器,也可以將執行器集成到現有業務項目中。
在你的springboot業務項目中,引入這個xxl-job-executor-sample-springboot模塊就可以了
執行器支持集群部署,提升調度系統可用性,同時提升任務處理能力。
執行器集群部署時,幾點要求和建議:
- 執行器回調地址(xxl.job.admin.addresses)需要保持一致;執行器根據該配置進行執行器自動註冊等操作。
- 同一個執行器集群內AppName(xxl.job.executor.appname)需要保持一致;調度中心根據該配置動態發現不同集群的線上執行器列表。
四、啟動-運行
首先啟動調度中心
這裡我們本地啟動,先創建好資料庫,並且導入官方提供的sql
Run 起來,查看控制台,顯示 success 就啟動成功
打開瀏覽器,輸入後臺地址 http://localhost:8080/xxl-job-admin, 賬號damin ,密碼預設是123456
啟動執行器
這裡我們啟動2個,測試下集群的任務運行情況:
先打開一個執行器的配置文件application.properties
8082就是複製的第二個執行器,代碼相同,改一下埠
xxl.job.admin.addresses,填寫你上面調度中心的地址
xxl.job.accessToken,調度中心如果配置了就要寫,沒有寫就預設空著
xxl.job.executor.appname,執行器名稱,官網文檔說瞭如果集群,appname要一致
兩個執行器都跑起來:
8081
8082
回到後臺調度中心後臺,2個執行器已經自動註冊
運行任務
前提:在執行器中,都有已經寫好了定時任務,我們用的官網demo,裡面已經有寫好的方法了
回到調度中心的任務管理,
我們編輯此任務,將路由策略改為輪詢:
保存後,執行一次,看看效果:
查看控制台,8082列印了日誌,說明8082運行了任務,8081沒有執行,因為我們執行路由策略是輪詢,並且保證這個任務只能被執行一次
再執行一次,8081 執行了
以上就是這次對XXL-JOB的一次學習和總結,以後如果有集群部署的地方,就不要再去使用springboot的Quartz這種只適合單體項目的定時任務了,如果不手動去處理,多個服務會重覆執行,可以考慮使用XXL-JOB,部署簡單、學習成本低!