XXL-JOB是一個分布式任務排程平台,其核心設計目标是開發迅速、學習簡單、輕量級、易擴充。現已開放源代碼并接入多家公司線上産品線,開箱即用。
本教程主要介紹怎麼在spring boot工程中快速使用xxl-job。詳細的xxl-job的使用文檔請參考:https://www.xuxueli.com/xxl-job/
簡介
在xxl-job中,有2個角色:
- 一個是排程任務管理系統,xll-job-admin
- 另一個是xxl-job-excutor,通常是我們業務系統,比如本案例的springboot業務系統。
整個排程任務執行流程如下:
- Xxl-job-admin官方代碼已經寫好,不做定制化開發的話,直接啟動即可正常運作。啟動Xxl-job-admin工程。
- xxl-job-excuotr需要配置xxl-job-admin的位址,主動向Xxl-job-admin注冊,并建立netty連接配接。在xxl-job-excutor中需要實作excutor的業務代碼。

xxl-job-admin
Xxl-job-admin是排程任務的管理中心。所有的excutor都會向xxl-job-admin注冊,注冊完成之後可以對excutor進行任務分發。
在官網中下載下傳最新的release代碼,比如本文中的v2.2.0版本,下載下傳位址為https://github.com/xuxueli/xxl-job/releases。
Xxl-job-admin需要Mysql資料庫,請提前準備安裝好。然後在資料庫中導入代碼工程中的doc/sql目錄下的s ql檔案。
然後修改xxl-job-admin工程中的resources中的application.properties的資料庫配置,如下:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
複制
修改之後,啟動XxlJobAdminApplication的main函數,xxl-job-admin啟動成功。
在浏覽器上通路http://localhost:8081/xxl-job-admin/ ,登陸使用者名為admin,密碼為123456。登陸成功後,顯示的界面如下:
xxl-job-excutor
xxl-job-excutor是任務的執行單元,需要在業務系統中去實作。本案例中是一個springboot的工程,此工程需要內建xxl-job作為任務執行單元。在工程的pom.xml檔案中引入xxl-job-core的依賴如下:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
複制
在工程的application.properties中配置xxl.job.admin.addresses的位址,配置含義見注釋,具體配置如下:
# web port
server.port=8082
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8081/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=../applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
複制
需要初始化一個XxlJobSpringExecutor,該類用于處理xxl-job-admin和xxl-job-excutor之間的通訊以及任務的處理。
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@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.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
複制
注冊一個任務,任務名為demoJobHandler。
@Component
public class SampleXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
/**
* 1、簡單任務示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
logger.info("XXL-JOB, Hello World. params:"+param);
for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
return ReturnT.SUCCESS;
}
}
複制
在xxl-job-admin中可以看到demoJobHandler的配置,在控制台啟動任務。
啟動任務後,可以看到執行任務的日志。同時在xxl-job-excutor中可以看到任務執行的業務日志。
源碼下載下傳
https://github.com/forezp/distributed-lab/tree/master/xxl-job