【xxl-job】輕松實現分布式定時任務demo實例


【項目描述】
前段時間專門獨立了一個spring boot服務,用於做和第三方erp系統的對接工作。此服務的第一個需求工作就是可以通過不同的規則,設置不同的定時任務,從而獲取erp系統的商品數據。所以,系統架構采用了xxl-job實現分布式定時任務。

【學習背景】
此項目不是我負責的,在上個月同事讓我幫忙處理一個問題,便帶給了我學習的機會,這個框架已經在線上環境使用,但框架也不是我參與搭建的,所以還是找到官方文檔和項目實例,積累下技術與項目經驗。本篇博客是一個簡單的demo實例,主要總結下如何將此框架與我們的項目結合。

【實例搭建】
初始化“調度數據庫”
下載項目源碼,獲取“調度數據庫初始化SQL腳本”,正常情況下生成16張表。
sql腳本位置: /xxl-job/doc/db/tables_xxl_job.sql
項目源碼地址:https://github.com/xuxueli/xxl-job
在IDEA中,我們可以直接選擇通過github地址新建項目:


配置部署“調度中心"
調度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
我們只需要將數據庫連接配置修改成自己的環境:


部署項目
正確進行上述配置后,我們可將項目編譯打war包部署到tomcat中。調度中心訪問地址:http://localhost:8080/xxl-job-admin (默認8080端口,該地址執行器將會使用到,作為回調地址)
我使用的是IDEA中Smart Tomcat部署的項目:

部署成功的話,你可以看到如下界面:


使用管理系統,在“任務管理"中,新建一個定時任務,填寫好相關的配置信息


使用管理系統,在“執行器管理”中配置一個執行器,也就是我們的項目中需要用到的


至此,調度中心的部署和配置工作結束了。下面是將此配置與我們的項目結合。只是一個demo實例,我就新建了一個spring boot框架項目,加入xxl-job框架搭建步驟如下:

1.項目加入maven依賴

<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>1.9.1</version>
</dependency>

  

2.xxlJobConfig配置類

@Slf4j
@Configuration
//掃描定時任務設置包路徑
@ComponentScan(basePackages = "com.uqiauto.springbootxxljob.job")
public class XxlJobConfig {

@Value("${xxl.job.admin.address}")
private String adminAddresses;

@Value("${xxl.job.executor.appname}")
private String appName;

@Value("${xxl.job.alarmEmail}")
private String alarmEmail;

@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(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(adminAddresses);
xxlJobExecutor.setAppName(appName);
xxlJobExecutor.setIp(ip);
xxlJobExecutor.setPort(port);
xxlJobExecutor.setAccessToken(accessToken);
xxlJobExecutor.setLogPath(logPath);
xxlJobExecutor.setLogRetentionDays(logRetentionDays);

return xxlJobExecutor;
}

public String getAdminAddresses() {
return adminAddresses;
}

public String getAppName() {
return appName;
}

public String getIp() {
return ip;
}

public int getPort() {
return port;
}

public String getAccessToken() {
return accessToken;
}

public String getLogPath() {
return logPath;
}

public int getLogRetentionDays() {
return logRetentionDays;
}

public String getAlarmEmail() {
return alarmEmail;
}
}

  


3.定時任務設置demo job

/**
* 任務Handler示例(Bean模式)
*
* 開發步驟:
* 1、繼承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
* 2、注冊到Spring容器:添加“@Component”注解,被Spring容器掃描為Bean實例;
* 3、注冊到執行器工廠:添加“@JobHandler(value="自定義jobhandler名稱")”注解,注解value值對應的是調度中心新建任務的JobHandler屬性的值。
* 4、執行日志:需要通過 "XxlJobLogger.log" 打印執行日志;
*
* @author xuxueli 2015-12-19 19:43:36
*/
@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {

@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");

for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}

return SUCCESS;
}

}

  

4.項目中配置xxl-job框架需要用到的信息

xxl.job:
admin.address: http://localhost:8088/xxl-job-admin/
accessToken:
alarmEmail: 18333617859@163.com
executor:
appname: xxl-job-executor-sample
ip:
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
#執行器Log文件定期清理功能,指定日志保存天數,日志文件過期自動刪除。限制至少保持3天,否則功能不生效;
logretentiondays: -1

  

至此,整個搭建步驟就完成了。我設置的定時任務是每小時執行一次,同時也支持我們在管理系統頁面去手動執行,最終我們可以通過管理系統去查看到定時任務執行的相關日志信息:


每條日志的詳細信息:


【學習總結】
本篇博客只是一個簡單的教程,將xxl-job分布式定時任務框架結合到一個spring boot 項目中,后面還會深入學習此分布式定時任務框架的其他知識,將此分布式定時任務框架與其他框架進行對比學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM