大鵬附近網(wǎng)站建設(shè)seo關(guān)鍵詞優(yōu)化軟件app
前言
在現(xiàn)代應(yīng)用程序中,定時(shí)任務(wù)是不可或缺的一部分。Spring Boot 和 XXL-Job 為你提供了一個(gè)強(qiáng)大的工具組合,以簡(jiǎn)化任務(wù)調(diào)度和管理。
本文將帶領(lǐng)你探索如何將這兩者集成在一起,實(shí)現(xiàn)高效的定時(shí)任務(wù)管理。無(wú)論你是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,本文都將提供你所需要的知識(shí),讓你輕松掌握這一技術(shù)。讓我們開(kāi)始吧!
一、XXL-Job簡(jiǎn)介
什么是XXL-job
官網(wǎng)地址:
https://www.xuxueli.com/xxl-job/
XXL-Job是一個(gè)開(kāi)源的分布式任務(wù)調(diào)度平臺(tái),主要用于解決大規(guī)模分布式系統(tǒng)中的任務(wù)調(diào)度和管理問(wèn)題。下面是XXL-Job的簡(jiǎn)介,重點(diǎn)強(qiáng)調(diào)其分布式任務(wù)調(diào)度的特點(diǎn):
XXL-Job簡(jiǎn)介:
XXL-Job是一個(gè)基于Java開(kāi)發(fā)的分布式任務(wù)調(diào)度平臺(tái),旨在幫助開(kāi)發(fā)者和運(yùn)維人員管理和調(diào)度任務(wù),特別適用于大規(guī)模分布式應(yīng)用。它提供了直觀的Web界面,易于配置和監(jiān)控各種類型的任務(wù)。
XXL-Job的關(guān)鍵特點(diǎn)包括:
-
分布式任務(wù)調(diào)度: XXL-Job支持分布式任務(wù)調(diào)度,可以輕松處理任務(wù)分布在不同節(jié)點(diǎn)的情況。這對(duì)于大型微服務(wù)架構(gòu)和集群環(huán)境非常有用。
-
彈性擴(kuò)展: XXL-Job支持彈性擴(kuò)展,你可以隨時(shí)增加或減少執(zhí)行器節(jié)點(diǎn),以適應(yīng)不同負(fù)載和任務(wù)需求。這確保了高可用性和性能。
-
任務(wù)調(diào)度中心: XXL-Job提供了一個(gè)任務(wù)調(diào)度中心,可以集中管理和監(jiān)控任務(wù)。你可以在Web界面上創(chuàng)建、編輯、刪除任務(wù),查看任務(wù)日志和統(tǒng)計(jì)信息。
-
多種任務(wù)類型: 支持多種任務(wù)類型,包括簡(jiǎn)單的定時(shí)任務(wù)、Bean調(diào)用、Shell腳本、HTTP任務(wù)、GLUE任務(wù)(動(dòng)態(tài)語(yǔ)言任務(wù)),滿足各種任務(wù)需求。
-
任務(wù)依賴和失敗重試: XXL-Job允許你配置任務(wù)之間的依賴關(guān)系,確保任務(wù)按照指定的順序執(zhí)行。同時(shí),它支持失敗重試機(jī)制,確保任務(wù)在失敗時(shí)能夠重新執(zhí)行。
-
報(bào)警和日志: 提供了報(bào)警機(jī)制,可以通過(guò)郵件、短信等方式通知任務(wù)執(zhí)行結(jié)果。任務(wù)執(zhí)行日志也可以在Web界面中查看,便于故障排查和監(jiān)控。
-
開(kāi)源和社區(qū)支持: XXL-Job是開(kāi)源項(xiàng)目,擁有活躍的社區(qū)支持和持續(xù)的更新。你可以根據(jù)自己的需求進(jìn)行定制和擴(kuò)展。
XXL-Job的分布式任務(wù)調(diào)度特點(diǎn)使其成為處理大規(guī)模、復(fù)雜任務(wù)調(diào)度需求的強(qiáng)大工具。它可以幫助開(kāi)發(fā)團(tuán)隊(duì)更好地管理任務(wù),提高系統(tǒng)的可靠性和可維護(hù)性,同時(shí)降低了任務(wù)調(diào)度的復(fù)雜性。
對(duì)比別的任務(wù)調(diào)度
XXL-Job在分布式任務(wù)調(diào)度領(lǐng)域有其獨(dú)特之處,下面是它與其他一些任務(wù)調(diào)度解決方案的比較,以突出其優(yōu)勢(shì)和特點(diǎn):
Quartz:
-
Quartz是一個(gè)強(qiáng)大的Java任務(wù)調(diào)度框架,但通常需要額外的配置和管理來(lái)支持分布式環(huán)境。XXL-Job提供了更易于配置和管理的分布式任務(wù)調(diào)度方案。
-
XXL-Job的Web界面和報(bào)警機(jī)制更加現(xiàn)代化,便于任務(wù)管理和監(jiān)控。
Spring的@Scheduled:
-
Spring的@Scheduled注解適用于單節(jié)點(diǎn)應(yīng)用程序,而XXL-Job專門設(shè)計(jì)用于分布式任務(wù)調(diào)度,支持在多個(gè)節(jié)點(diǎn)上執(zhí)行任務(wù)。
-
XXL-Job提供了任務(wù)依賴和失敗重試的機(jī)制,以處理復(fù)雜任務(wù)流程。
Elastic Job:
-
Elastic Job是另一個(gè)分布式任務(wù)調(diào)度框架,但XXL-Job更注重任務(wù)的可視化管理,提供了直觀的Web界面。
-
XXL-Job的報(bào)警機(jī)制更加豐富,能夠及時(shí)通知任務(wù)執(zhí)行結(jié)果。
Akka Scheduler:
-
Akka是一個(gè)并發(fā)編程庫(kù),它提供了定時(shí)任務(wù)功能,但相對(duì)更加復(fù)雜。XXL-Job更適合那些希望通過(guò)Web界面輕松管理任務(wù)的團(tuán)隊(duì)。
-
XXL-Job的彈性擴(kuò)展特性使其適用于大規(guī)模分布式系統(tǒng)。
Cron4J:
-
Cron4J是一個(gè)輕量級(jí)的Java定時(shí)任務(wù)庫(kù),適用于簡(jiǎn)單任務(wù)。XXL-Job提供了更多高級(jí)功能,如任務(wù)依賴、失敗重試和任務(wù)監(jiān)控。
總體而言,XXL-Job在分布式任務(wù)調(diào)度方面的優(yōu)勢(shì)在于其易用性、可視化管理、分布式支持、任務(wù)依賴和報(bào)警機(jī)制。它是一個(gè)強(qiáng)大的工具,特別適合需要大規(guī)模任務(wù)調(diào)度和監(jiān)控的應(yīng)用程序。
然而,具體選擇取決于項(xiàng)目需求,一些輕量級(jí)的解決方案可能在小型應(yīng)用中更加合適。
二、springboot整合XXL-job
配置XXL-Job Admin
拉取XXL-Job代碼
-
【gitee】
https://gitee.com/xuxueli0323/xxl-job
-
【github】
https://github.com/xuxueli/xxl-job/
上面的github和gitee都可以選擇,然后拉取下來(lái)
修改拉取的配置
1.執(zhí)行拉取下來(lái)的sql:/xxl-job/doc/db/tables_xxl_job.sql
2.修改調(diào)度中心配置/xxl-job/xxl-job-admin/src/main/resources/application.properties
###?web,端口,這里我修改了,默認(rèn)是8080
server.port=9998
#?修改連接數(shù)據(jù)庫(kù)配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3361/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456###?xxl-job,?access?token,注意這里的accessToken在執(zhí)行器中也需要配置(一致)
xxl.job.accessToken=eyJhbGciOiJIUzI1NiJ9
3.修改/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml
,否則可能會(huì)報(bào)錯(cuò)
<!--?這里需要修改的值如下,不然會(huì)找不到日志路徑-->
<property?name="log.path"?value="./logs/xxl-job-admin.log"/>
4.訪問(wèn)http://127.0.0.1:9998/xxl-job-admin
,這里端口是你上面配置的,輸入默認(rèn)的賬號(hào)密碼admin/123456
到這里調(diào)度中心就配置好了
配置執(zhí)行器
這里其實(shí)剛剛拉取的項(xiàng)目下就涵蓋了執(zhí)行器,包括無(wú)框架的以及springboot框架的
自己的項(xiàng)目如何整合
maven依賴
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version>
</dependency>
properties文件配置
###?調(diào)度中心部署根地址?[選填]:如調(diào)度中心集群部署存在多個(gè)地址則用逗號(hào)分隔。執(zhí)行器將會(huì)使用該地址進(jìn)行"執(zhí)行器心跳注冊(cè)"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動(dòng)注冊(cè);這里的ip也是上面調(diào)度中心的
xxl.job.admin.addresses=http://127.0.0.1:9998/xxl-job-admin
###?執(zhí)行器通訊TOKEN?[選填]:非空時(shí)啟用;這里的密碼是上面調(diào)度中心的
xxl.job.accessToken=eyJhbGciOiJIUzI1NiJ9
###?執(zhí)行器AppName?[選填]:執(zhí)行器心跳注冊(cè)分組依據(jù);為空則關(guān)閉自動(dòng)注冊(cè)
xxl.job.executor.appname=xxl-job-executor-xiaobo
###?執(zhí)行器注冊(cè)?[選填]:優(yōu)先使用該配置作為注冊(cè)地址,為空時(shí)使用內(nèi)嵌服務(wù)?”IP:PORT“?作為注冊(cè)地址。從而更靈活的支持容器類型執(zhí)行器動(dòng)態(tài)IP和動(dòng)態(tài)映射端口問(wèn)題。
xxl.job.executor.address=
###?執(zhí)行器IP?[選填]:默認(rèn)為空表示自動(dòng)獲取IP,多網(wǎng)卡時(shí)可手動(dòng)設(shè)置指定IP,該IP不會(huì)綁定Host僅作為通訊實(shí)用;地址信息用于?"執(zhí)行器注冊(cè)"?和?"調(diào)度中心請(qǐng)求并觸發(fā)任務(wù)";
xxl.job.executor.ip=
###?執(zhí)行器端口號(hào)?[選填]:小于等于0則自動(dòng)獲取;默認(rèn)端口為9999,單機(jī)部署多個(gè)執(zhí)行器時(shí),注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=9999
###?執(zhí)行器運(yùn)行日志文件存儲(chǔ)磁盤路徑?[選填]?:需要對(duì)該路徑擁有讀寫權(quán)限;為空則使用默認(rèn)路徑;
xxl.job.executor.logpath=./logs/xxl-job/jobhandler
###?執(zhí)行器日志文件保存天數(shù)?[選填]?:?過(guò)期日志自動(dòng)清理,?限制值大于等于3時(shí)生效;?否則,?如-1,?關(guān)閉自動(dòng)清理功能;
xxl.job.executor.logretentiondays=30
執(zhí)行器組件配置
package?com.todoitbo.baseSpringbootDasmart.config;import?com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import?org.springframework.beans.factory.annotation.Value;
import?lombok.extern.slf4j.Slf4j;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;/***?@author?pipilin*?@date?2023/10/24*/
@Configuration
@Slf4j
public?class?XxlJobConfig?{@Value("${xxl.job.admin.addresses}")private?String?adminAddresses;@Value("${xxl.job.executor.appname}")private?String?appname;@Value("${xxl.job.executor.ip}")private?String?ip;@Value("${xxl.job.executor.port}")private?int?port;@Value("${xxl.job.accesstoken}")private?String?accessToken;@Value("${xxl.job.executor.logpath}")private?String?logPath;@Value("${xxl.job.executor.logretentiondays}")private?int?logRetentionDays;@Beanpublic?XxlJobSpringExecutor?xxlJobExecutor()?{log.info(">>>>>>>>>>>?xxl-job?config?init.");XxlJobSpringExecutor?xxlJobSpringExecutor?=?new?XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return?xxlJobSpringExecutor;}
}
jobhandler配置
package?com.todoitbo.baseSpringbootDasmart.handler;import?com.xxl.job.core.context.XxlJobHelper;
import?com.xxl.job.core.handler.annotation.XxlJob;
import?org.springframework.stereotype.Component;/***?@author?pipilin*?@date?2023/10/24*/
@Component
public?class?JobHandler?{@XxlJob("demoJobHandler")public?void?demoJobHandler()?throws?Exception?{XxlJobHelper.log("XXL-JOB,?Hello?World.");}
}
拉取下來(lái)的代碼中/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java
是更詳細(xì)的配置
實(shí)現(xiàn)效果
1.啟動(dòng)項(xiàng)目,出現(xiàn)如下即成功
2.任務(wù)調(diào)度頁(yè)面中加入執(zhí)行器
3.配置任務(wù)
4.啟動(dòng)任務(wù)
??:這里如果你要執(zhí)行一次的話,機(jī)器地址一定是帶http的,比如http://127.0.0.1:9999
如果是啟動(dòng)的話,先點(diǎn)擊注冊(cè)節(jié)點(diǎn),再啟動(dòng)即可
三、@XxlJob中參數(shù)詳解
以下是這三個(gè)參數(shù)的詳細(xì)說(shuō)明:
-
value:
-
參數(shù)類型: String
-
說(shuō)明: 任務(wù)的名字,必須是唯一的。在XXL-Job Admin中配置任務(wù)時(shí),這個(gè)值用于標(biāo)識(shí)任務(wù)。
-
init:
-
參數(shù)類型: String
-
說(shuō)明: 任務(wù)初始化時(shí)的方法名。這個(gè)方法會(huì)在任務(wù)第一次執(zhí)行前被調(diào)用,通常用于初始化一些資源。方法必須是無(wú)參數(shù)的。
-
destroy:
-
參數(shù)類型: String
-
說(shuō)明: 任務(wù)銷毀時(shí)的方法名。這個(gè)方法會(huì)在任務(wù)最后一次執(zhí)行后被調(diào)用,通常用于釋放資源。方法必須是無(wú)參數(shù)的。
這三個(gè)參數(shù)是@XxlJob注解的基本參數(shù),用于定義任務(wù)的基本屬性。
四、最佳實(shí)踐
使用Spring Boot和XXL-Job進(jìn)行任務(wù)調(diào)度是一種強(qiáng)大的方式,但也有一些常見(jiàn)的錯(cuò)誤和最佳實(shí)踐,以下是一些建議,幫助讀者避免這些錯(cuò)誤并在實(shí)際項(xiàng)目中取得成功:
詳細(xì)記錄任務(wù)日志:記錄任務(wù)的執(zhí)行日志是非常重要的,它可以幫助你追蹤任務(wù)的執(zhí)行情況,及時(shí)發(fā)現(xiàn)問(wèn)題。確保在任務(wù)Handler中添加詳細(xì)的日志信息。
-
參數(shù)校驗(yàn): 在任務(wù)Handler中對(duì)傳遞的參數(shù)進(jìn)行合法性校驗(yàn),以避免不必要的異常和錯(cuò)誤。
-
任務(wù)冪等性: 確保任務(wù)的邏輯是冪等的,即多次執(zhí)行不會(huì)產(chǎn)生不同的結(jié)果。這對(duì)于任務(wù)失敗后的重試非常重要。
-
失敗處理: 配置任務(wù)的失敗處理策略,包括重試次數(shù)、重試間隔等。這可以幫助應(yīng)對(duì)臨時(shí)問(wèn)題,如網(wǎng)絡(luò)故障或資源不足。
-
任務(wù)依賴: 如果任務(wù)之間存在依賴關(guān)系,確保在XXL-Job Admin中正確配置任務(wù)的依賴關(guān)系,以保證任務(wù)按照正確的順序執(zhí)行。
-
動(dòng)態(tài)調(diào)度: 利用XXL-Job的動(dòng)態(tài)調(diào)度功能來(lái)應(yīng)對(duì)實(shí)時(shí)需求的變化,如動(dòng)態(tài)調(diào)整任務(wù)觸發(fā)時(shí)間、任務(wù)取消、任務(wù)延遲等。
-
監(jiān)控與報(bào)警: 集成監(jiān)控和報(bào)警系統(tǒng),可以幫助你實(shí)時(shí)監(jiān)測(cè)任務(wù)的執(zhí)行情況,及時(shí)發(fā)現(xiàn)問(wèn)題并采取措施。XXL-Job提供了與監(jiān)控系統(tǒng)的集成支持。
-
版本管理: 使用版本控制工具(如Git)來(lái)管理任務(wù)Handler代碼,以便跟蹤任務(wù)邏輯的變化和恢復(fù)歷史版本。
-
測(cè)試任務(wù)邏輯: 在開(kāi)發(fā)任務(wù)Handler時(shí)進(jìn)行充分的單元測(cè)試,確保任務(wù)邏輯的正確性。XXL-Job提供了一些測(cè)試工具,如JobLogger。
-
集群部署: 如果需要,部署XXL-Job執(zhí)行器節(jié)點(diǎn)以提高任務(wù)的可用性和負(fù)載均衡。
-
版本升級(jí): 定期關(guān)注XXL-Job的更新版本,確保使用最新的穩(wěn)定版本,以獲得最新的功能和 bug 修復(fù)。
-
安全性: 保護(hù)XXL-Job Admin的訪問(wèn)權(quán)限,防止未經(jīng)授權(quán)的訪問(wèn)。不要在任務(wù)邏輯中存儲(chǔ)敏感信息。
-
文檔和培訓(xùn): 提供適當(dāng)?shù)奈臋n和培訓(xùn),以便項(xiàng)目團(tuán)隊(duì)了解如何使用XXL-Job和任務(wù)調(diào)度最佳實(shí)踐。
遵循這些最佳實(shí)踐可以幫助你更好地使用Spring Boot和XXL-Job,確保任務(wù)調(diào)度系統(tǒng)的可靠性和穩(wěn)定性。這對(duì)于生產(chǎn)環(huán)境中的任務(wù)調(diào)度至關(guān)重要。