SpringBoot整合Xxl-job實(shí)現(xiàn)定時(shí)任務(wù)的全過(guò)程
前言
? XXL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、學(xué)習(xí)簡(jiǎn)單、輕量級(jí)、易擴(kuò)展?,F(xiàn)已開(kāi)放源代碼并接入多家公司線上產(chǎn)品線,開(kāi)箱即用。
如果是單機(jī)并且定時(shí)任務(wù)不多的情況,可以選擇Timer注解@Scheduled或者Cron工具類等方式來(lái)實(shí)現(xiàn),但是這有個(gè)缺點(diǎn),那就是定時(shí)任務(wù)會(huì)寫(xiě)死在代碼中,一旦啟動(dòng),就不能暫停或者修改。如果修改的話,整個(gè)還項(xiàng)目要重新編譯,這屬實(shí)非常的麻煩。
? 本篇文章將會(huì)介紹如何通過(guò)xxl-job來(lái)實(shí)現(xiàn)任務(wù)的調(diào)度
一、部署調(diào)度中心
1、項(xiàng)目下載
下面是調(diào)度中心代碼的gitee地址,可以colon到本地
http://gitee.com/xuxueli0323/xxl-job
2、初始化數(shù)據(jù)
在下載好的項(xiàng)目中的doc/db目錄下有一個(gè)tables_xxl_job.sql文件,先放到自己的數(shù)據(jù)庫(kù)中執(zhí)行,其實(shí)就是初始化好調(diào)度中心需要的表結(jié)構(gòu)和數(shù)據(jù)
3、修改properties配置文件
用IDE打開(kāi)clone好的項(xiàng)目,然后修改xxl-job-admin模塊下的properties配置文件,只需要將連接數(shù)據(jù)庫(kù)的url、username、password修改成你自己的就可以。修改好之后就可以啟動(dòng)xxl-job-admin調(diào)度中心了。然后打開(kāi)http://localhost:8080/xxl-job-admin/就可以看到控制面板:

二、部署SpringBoot項(xiàng)目
1、引入依賴
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
2、創(chuàng)建配置類
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@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;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.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;
}
}
3、修改配置文件
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin #部署的調(diào)度中心的url
executor:
appname: xxl-job-volunteer-executor #執(zhí)行器的名字
ip:
port: 9999 #調(diào)度中心調(diào)用執(zhí)行器時(shí)使用的端口
logpath: /data/apploggs/xxl-job/jobhandler #日志路徑
logretentiondays: 30 #日志保留天數(shù)
accessToken:
4、創(chuàng)建執(zhí)行器
@Component
public class XxlJobSample {
// myDemoJob是任務(wù)的名字,也是Spring中bean的名字
@XxlJob("myDemoJob")
public ReturnT<String> myDemoJob(String value) {
System.out.println("myDemoJob:定時(shí)任務(wù)觸發(fā):" + value);
return ReturnT.SUCCESS;
}
}
5、啟動(dòng)SpringBoot項(xiàng)目
啟動(dòng)成功后會(huì)看到下面兩行日志信息, 可以看到成功連接到了調(diào)度中心然后注冊(cè)了將要被調(diào)度任務(wù)
>>>>>>>>>>> xxl-job register jobhandler success, name:myDemoJob, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob] >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999
三、通過(guò)調(diào)度中心進(jìn)行任務(wù)調(diào)度
1、添加執(zhí)行器

輸入配置文件中配置的appName,名稱可以隨意

2、添加任務(wù)
新增調(diào)度任務(wù)


查看調(diào)度任務(wù)

3、任務(wù)調(diào)度中心發(fā)起任務(wù)調(diào)度

在SpringBoot項(xiàng)目中可以看到控制臺(tái)輸出如下信息:
2022-01-16 11:54:05.039 INFO 7836 --- [Pool-1148366645] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job regist JobThread success, jobId:7, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob] myDemoJob:定時(shí)任務(wù)觸發(fā):testParam 2022-01-16 11:55:38.059 INFO 7836 --- [ Thread-22] com.xxl.job.core.thread.JobThread : >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[Thread-22,10,main]
四、小結(jié)
至此,SpringBoot整合Xxl-job就完成了,剛才的示例代碼其實(shí)對(duì)于原來(lái)的項(xiàng)目還是有一定的侵入性的,上面僅僅演示了BEAN運(yùn)行模式,說(shuō)白了就是調(diào)用加了@XxlJob的方法。其實(shí)在創(chuàng)建任務(wù)的時(shí)候還可以嘗試使用GLUE(Java)這一運(yùn)行模式,這種方式其實(shí)就是執(zhí)行你輸入的Java代碼,這種方式可以不用在原有的項(xiàng)目之上新增依賴或者配置,對(duì)于定時(shí)任務(wù),只需要編寫(xiě)一個(gè)接口用于觸發(fā),然后GLUE(Java)任務(wù)定時(shí)的去請(qǐng)求暴露的接口即可
下面是代碼片段:
public class DemoGlueJobHandler extends IJobHandler {
@Override
public void execute() throws Exception {
XxlJobHelper.log("定時(shí)任務(wù)執(zhí)行了一次");
HttpRequest.post("http://localhost:8088/oos/test")
.header(Header.USER_AGENT, "xxl-job")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
.timeout(20000)//超時(shí),毫秒
.execute();
}
}
上面的代碼其實(shí)會(huì)在執(zhí)行器中進(jìn)行執(zhí)行,可以實(shí)現(xiàn)在Test里面跑一下,沒(méi)有問(wèn)題后再貼過(guò)來(lái)(還要注意復(fù)制import等信息)
以上就是今天的全部?jī)?nèi)容了,想了解更多,可以閱讀官方文檔
總結(jié)
到此這篇關(guān)于SpringBoot整合Xxl-job實(shí)現(xiàn)定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)SpringBoot整合Xxl-job實(shí)現(xiàn)定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot整合 xxl-job及使用步驟
- springboot整合 xxl-job的項(xiàng)目實(shí)踐
- SpringBoot集成xxl-job實(shí)現(xiàn)超牛的定時(shí)任務(wù)的步驟詳解
- springboot整合x(chóng)xl-job的實(shí)現(xiàn)示例
- xxl-job的部署及springboot集成使用示例詳解
- SpringBoot部署xxl-job方法詳細(xì)講解
- springboot整合x(chóng)xl-job實(shí)現(xiàn)分布式定時(shí)任務(wù)的過(guò)程
- springboot整合x(chóng)xl-job的示例代碼
- Springboot整合x(chóng)xl-job實(shí)現(xiàn)動(dòng)態(tài)傳參
相關(guān)文章
Reactive Programming入門(mén)概念詳解
這篇文章主要為大家介紹了Reactive Programming入門(mén)概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
一文解決System.in關(guān)閉后無(wú)法再繼續(xù)使用流的問(wèn)題
這篇文章主要給大家介紹如何解決System.in關(guān)閉后無(wú)法再繼續(xù)使用流的問(wèn)題,文中有詳細(xì)的解決方法和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
SpringBoot集成Swagger2實(shí)現(xiàn)Restful(類型轉(zhuǎn)換錯(cuò)誤解決辦法)
這篇文章主要介紹了SpringBoot集成Swagger2實(shí)現(xiàn)Restful(類型轉(zhuǎn)換錯(cuò)誤解決辦法),需要的朋友可以參考下2017-07-07
log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式
這篇文章主要介紹了log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot自定義starter方法及注解實(shí)例
這篇文章主要為大家介紹了springboot自定義starter方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
SpringBoot 動(dòng)態(tài)配置郵箱發(fā)件人過(guò)程解析
這篇文章主要介紹了SpringBoot 動(dòng)態(tài)配置郵箱發(fā)件人過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Spring Boot 2.X快速整合jpa過(guò)程解析
這篇文章主要介紹了Spring Boot 2.X 如何快速整合jpa?,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

