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

二、部署SpringBoot項目
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 #部署的調度中心的url
executor:
appname: xxl-job-volunteer-executor #執(zhí)行器的名字
ip:
port: 9999 #調度中心調用執(zhí)行器時使用的端口
logpath: /data/apploggs/xxl-job/jobhandler #日志路徑
logretentiondays: 30 #日志保留天數(shù)
accessToken:
4、創(chuàng)建執(zhí)行器
@Component
public class XxlJobSample {
// myDemoJob是任務的名字,也是Spring中bean的名字
@XxlJob("myDemoJob")
public ReturnT<String> myDemoJob(String value) {
System.out.println("myDemoJob:定時任務觸發(fā):" + value);
return ReturnT.SUCCESS;
}
}
5、啟動SpringBoot項目
啟動成功后會看到下面兩行日志信息, 可以看到成功連接到了調度中心然后注冊了將要被調度任務
>>>>>>>>>>> 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
三、通過調度中心進行任務調度
1、添加執(zhí)行器

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

2、添加任務
新增調度任務


查看調度任務

3、任務調度中心發(fā)起任務調度

在SpringBoot項目中可以看到控制臺輸出如下信息:
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:定時任務觸發(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]
四、小結
至此,SpringBoot整合Xxl-job就完成了,剛才的示例代碼其實對于原來的項目還是有一定的侵入性的,上面僅僅演示了BEAN運行模式,說白了就是調用加了@XxlJob的方法。其實在創(chuàng)建任務的時候還可以嘗試使用GLUE(Java)這一運行模式,這種方式其實就是執(zhí)行你輸入的Java代碼,這種方式可以不用在原有的項目之上新增依賴或者配置,對于定時任務,只需要編寫一個接口用于觸發(fā),然后GLUE(Java)任務定時的去請求暴露的接口即可
下面是代碼片段:
public class DemoGlueJobHandler extends IJobHandler {
@Override
public void execute() throws Exception {
XxlJobHelper.log("定時任務執(zhí)行了一次");
HttpRequest.post("http://localhost:8088/oos/test")
.header(Header.USER_AGENT, "xxl-job")//頭信息,多個頭信息多次調用此方法即可
.timeout(20000)//超時,毫秒
.execute();
}
}
上面的代碼其實會在執(zhí)行器中進行執(zhí)行,可以實現(xiàn)在Test里面跑一下,沒有問題后再貼過來(還要注意復制import等信息)
以上就是今天的全部內容了,想了解更多,可以閱讀官方文檔
總結
到此這篇關于SpringBoot整合Xxl-job實現(xiàn)定時任務的文章就介紹到這了,更多相關SpringBoot整合Xxl-job實現(xiàn)定時任務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaWeb入門:HttpResponse和HttpRequest詳解
這篇文章主要介紹了Django的HttpRequest和HttpResponse對象,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2021-07-07
Java MultipartFile實現(xiàn)上傳文件/上傳圖片
這篇文章主要介紹了Java MultipartFile實現(xiàn)上傳文件/上傳圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12
java中Scanner.next()和Scanner.nextLine的區(qū)別圖文詳解
使用java語言編程,最常用的輸入就是使用Scanner了,它的構造很簡單,這篇文章主要給大家介紹了關于java中Scanner.next()和Scanner.nextLine區(qū)別的相關資料,需要的朋友可以參考下2024-02-02
idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法
這篇文章主要介紹了idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法,通過將File Encodings內容設置為UTF-8,本文通過圖文展示,需要的朋友可以參考下2021-06-06
springboot項目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析
這篇文章主要介紹了springboot項目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

