SpringBoot整合PowerJob實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度
簡(jiǎn)介
PowerJob是基于java開(kāi)發(fā)的企業(yè)級(jí)的分布式任務(wù)調(diào)度平臺(tái),與xxl-job一樣,基于web頁(yè)面實(shí)現(xiàn)任務(wù)調(diào)度配置與記錄,使用簡(jiǎn)單,上手快速,其主要功能特性如下:
- 使用簡(jiǎn)單:提供前端Web界面,允許開(kāi)發(fā)者可視化地完成調(diào)度任務(wù)的管理(增、刪、改、查)、任務(wù)運(yùn)行狀態(tài)監(jiān)控和運(yùn)行日志查看等功能。
- 定時(shí)策略完善:支持 CRON 表達(dá)式、固定頻率、固定延遲和API四種定時(shí)調(diào)度策略。
- 執(zhí)行模式豐富:支持單機(jī)、廣播、Map、MapReduce 四種執(zhí)行模式,其中 Map/MapReduce 處理器能使開(kāi)發(fā)者寥寥數(shù)行代碼便獲得集群分布式計(jì)算的能力。
- 工作流支持:支持在線配置任務(wù)依賴關(guān)系(DAG),以可視化的方式對(duì)任務(wù)進(jìn)行編排,同時(shí)還支持上下游任務(wù)間的數(shù)據(jù)傳遞,以及多種節(jié)點(diǎn)類型(判斷節(jié)點(diǎn) & 嵌套工作流節(jié)點(diǎn))。
- 執(zhí)行器支持廣泛:支持 Spring Bean、內(nèi)置/外置 Java 類,另外可以通過(guò)引入官方提供的依賴包,一鍵集成 Shell、Python、HTTP、SQL 等處理器,應(yīng)用范圍廣。
- 運(yùn)維便捷:支持在線日志功能,執(zhí)行器產(chǎn)生的日志可以在前端控制臺(tái)頁(yè)面實(shí)時(shí)顯示,降低 debug 成本,極大地提高開(kāi)發(fā)效率。
- 依賴精簡(jiǎn):最小僅依賴關(guān)系型數(shù)據(jù)庫(kù)(MySQL/PostgreSQL/Oracle/MS SQLServer…)
- 高可用 & 高性能:調(diào)度服務(wù)器經(jīng)過(guò)精心設(shè)計(jì),一改其他調(diào)度框架基于數(shù)據(jù)庫(kù)鎖的策略,實(shí)現(xiàn)了無(wú)鎖化調(diào)度。部署多個(gè)調(diào)度服務(wù)器可以同時(shí)實(shí)現(xiàn)高可用和性能的提升(支持無(wú)限的水平擴(kuò)展)。
- 故障轉(zhuǎn)移與恢復(fù):任務(wù)執(zhí)行失敗后,可根據(jù)配置的重試策略完成重試,只要執(zhí)行器集群有足夠的計(jì)算節(jié)點(diǎn),任務(wù)就能順利完成。
定時(shí)任務(wù)類型
- 與傳統(tǒng)的定時(shí)任務(wù)框架對(duì)比,powerJob支持更多的定時(shí)任務(wù)類型:
API: 通過(guò)客戶端提供的api接口觸發(fā),服務(wù)端不會(huì)主動(dòng)調(diào)度,適用于與業(yè)務(wù)服務(wù)上下連接或只調(diào)度一次的業(yè)務(wù)場(chǎng)景 - CRON: 通過(guò)cron表達(dá)式調(diào)度,這是多數(shù)定時(shí)任務(wù)框架都支持的
- 固定頻率:每隔多少毫秒執(zhí)行一次。
- 固定延遲:延遲多少毫秒執(zhí)行一次
- 工作流:配合工作流進(jìn)行調(diào)度,服務(wù)端不會(huì)主動(dòng)調(diào)度,當(dāng)工作流節(jié)點(diǎn)執(zhí)行到該任務(wù)時(shí)運(yùn)行。
運(yùn)行
1.然后將powerjob-server/powerjob-server-starter下的application-daily.properties配置文件中的數(shù)據(jù)庫(kù)配置改成你服務(wù)器的
其中daily,pre,product 表示日常、預(yù)生產(chǎn)、生產(chǎn)環(huán)境下的配置,與我們常見(jiàn)的dev, test, prod類似,可以根據(jù)需要進(jìn)行調(diào)整
2. 我們先來(lái)本地運(yùn)行啟動(dòng)類PowerJobServerApplication一下試試,啟動(dòng)成功后,訪問(wèn)http://localhost:7700,出現(xiàn)登陸頁(yè)則說(shuō)明運(yùn)行成功
3、先注冊(cè)一個(gè)執(zhí)行器,注意這里的應(yīng)用名稱不能順便取,下文在客戶端的配置的app-name要與該名稱保持一致
4、然后用該執(zhí)行器名和密碼登錄
5、如下,我們就登錄成功了
部署 以 jar 包的形式
運(yùn)行 maven 打jar 包
注意,如果這里報(bào)錯(cuò)
那么可以將maven的健康檢查關(guān)閉,點(diǎn)擊如圖所示按鈕,并且看到test置灰,則表示關(guān)閉
新版idea 可能這樣的
執(zhí)行mvn package打包項(xiàng)目
在powerjob-server-starter的target目錄下即可看到打包出來(lái)的jar,將其上傳到指定服務(wù)器,通過(guò)java -jar指令即可運(yùn)行
創(chuàng)建新項(xiàng)目
1、創(chuàng)建一個(gè)springboot項(xiàng)目,用于定時(shí)任務(wù)客戶端,引入客戶端依賴,如果是spring或其他java項(xiàng)目引入,可參考官網(wǎng)文檔:
<dependency> <groupId>tech.powerjob</groupId> <artifactId>powerjob-worker-spring-boot-starter</artifactId> <version>4.3.2</version> </dependency>
2、修改配置文件
powerjob: worker: enabled: true enable-test-mode: false port: 27777 app-name: admin # 應(yīng)用名稱,需與PowerJob服務(wù) 注冊(cè)的應(yīng)用保持一致 server-address: 127.0.0.1:7700 protocol: http max-result-length: 4096 max-lightweight-task-num: 1024 max-heavy-task-num: 64
3、啟動(dòng)類上添加注解@EnableScheduling
4、通過(guò)申明BasicProcessor接口,實(shí)現(xiàn)process方法來(lái)書(shū)寫(xiě)一個(gè)簡(jiǎn)單的定時(shí)任務(wù)示例類,注意要聲明為bean
5、啟動(dòng)客戶端項(xiàng)目,運(yùn)行成功后,可以在服務(wù)端首頁(yè)看到機(jī)器實(shí)例
6、服務(wù)端任務(wù)管理點(diǎn)擊新建任務(wù)
其中處理器配置是通過(guò)書(shū)寫(xiě)處理器的全類路徑名來(lái)聲明的,比如我這里是com.example.powerjobdemo.job.SimpleJobServer
7、創(chuàng)建成功后,可以在列表看到新建的任務(wù)
8、打開(kāi)客戶端控制臺(tái),也能看到輸出的參數(shù)和執(zhí)行打印,說(shuō)明任務(wù)執(zhí)行成功
9、同時(shí)我們可以在運(yùn)行記錄中看到執(zhí)行日志
至此,針對(duì)powerjob的最簡(jiǎn)單使用就完成了
定時(shí)信息:
主要選擇定時(shí)任務(wù)類型,支持API, CRON,固定頻率、固定延遲、工作流、每日固定間隔等幾種定時(shí)任務(wù)類型。
生命周期:
這是比其他任務(wù)框架更便捷的功能,指定了任務(wù)的生效周期,如果該任務(wù)是預(yù)定某時(shí)間段內(nèi)執(zhí)行的,可以通過(guò)該參數(shù)配置
執(zhí)行配置:
執(zhí)行類型支持單機(jī)執(zhí)行、廣播執(zhí)行、Map執(zhí)行、MapReduce執(zhí)行
單機(jī)執(zhí)行表示只需要有一個(gè)節(jié)點(diǎn)執(zhí)行任務(wù)即可的場(chǎng)景
廣播執(zhí)行表示需要全部節(jié)點(diǎn)一同執(zhí)行的場(chǎng)景,比如清除機(jī)器日志、各節(jié)點(diǎn)數(shù)據(jù)統(tǒng)計(jì)
Map與MapReduce執(zhí)行都是表示分布式、分批執(zhí)行,用來(lái)拆分計(jì)算量、耗時(shí)較大的任務(wù),區(qū)別在于Map執(zhí)行是一種簡(jiǎn)單的數(shù)據(jù)處理邏輯,特點(diǎn)是將輸入數(shù)據(jù)拆分成多個(gè)子塊,并交給多個(gè)分布式節(jié)點(diǎn)同時(shí)執(zhí)行,以提高數(shù)據(jù)處理效率,適用于簡(jiǎn)單的數(shù)據(jù)處理場(chǎng)景
MapReduce執(zhí)行是一種大數(shù)據(jù)處理框架,處理邏輯是將復(fù)雜的數(shù)據(jù)處理拆分成Map和Reduce階段進(jìn)行處理,通過(guò)數(shù)據(jù)分組計(jì)算后合并來(lái)提供數(shù)據(jù)處理效率,更適合復(fù)雜的大數(shù)據(jù)場(chǎng)景
運(yùn)行時(shí)配置:
支持HEALTH_FIRST和RANDOM,即第一個(gè)健康節(jié)點(diǎn)和隨機(jī),用于選擇執(zhí)行處理器節(jié)點(diǎn)的策略。
最大實(shí)例數(shù)用于控制處理器節(jié)點(diǎn)數(shù)量,線程并發(fā)度用于控制并發(fā),運(yùn)行時(shí)間限制
以上就是SpringBoot整合PowerJob實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot PowerJob任務(wù)調(diào)度的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解
這篇文章主要為大家介紹了Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09java8?Stream大數(shù)據(jù)量List分批處理切割方式
這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Springboot使用@Aspect、自定義注解記錄日志方式
本文介紹了如何使用AOP技術(shù)進(jìn)行日志記錄,包括掃描包和自定義注解兩種方式,掃描包方式通過(guò)添加依賴和配置切入點(diǎn)表達(dá)式實(shí)現(xiàn),自定義注解方式則通過(guò)創(chuàng)建自定義注解和AOP切面類來(lái)實(shí)現(xiàn)方法執(zhí)行時(shí)間的統(tǒng)計(jì)和記錄2024-11-11spring validation多層對(duì)象校驗(yàn)教程
這篇文章主要介紹了spring validation多層對(duì)象校驗(yàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10使用lombok的@Data會(huì)導(dǎo)致棧溢出StackOverflowError問(wèn)題
這篇文章主要介紹了使用lombok的@Data會(huì)導(dǎo)致棧溢出StackOverflowError問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11