官方文檔:
- [中文文檔](https://www.xuxueli.com/xxl-job/)
- [English Documentation](https://www.xuxueli.com/xxl-job/en/)
源碼:
[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job) | [Download](https://github.com/xuxueli/xxl-job/releases)
[http://gitee.com/xuxueli0323/xxl-job](http://gitee.com/xuxueli0323/xxl-job) | [Download](http://gitee.com/xuxueli0323/xxl-job/releases)
關于調度中心和執行器的架構圖
xxl-job主要是分為兩個部分,調度中心主要是進行定時作業的配置,執行器則是各個業務系統執行定時作業的具體邏輯。
關于調度中心:
調度中心這塊比較簡單,直接拉源碼中admin模塊作為一個項目運行,調度中心就完成了,需要修改的配置如下:
第一步:初始化數據庫,把源碼中/xxl-job/doc/db/tables_xxl_job.sql 的sql腳本運行,數據庫就初始化完成了。
第二步:修改配置文件
### 調度中心JDBC鏈接:初始化數據地址
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=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 報警郵箱 (不需要可以不配置)
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 調度中心通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 調度中心國際化配置 [必填]: 默認為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調度中心日志表數據保存天數 [必填]:過期日志自動清理;限制大于等于7時生效,否則, 如-1,關閉自動清理功能;
xxl.job.logretentiondays=30
第三步,啟動項目,調度中心完成,調度中心訪問地址:http://localhost:8080/xxl-job-admin? ?,默認登錄賬號 “admin/123456”
關于執行器(筆者用的項目是基于springboot的,以下只是一個簡單的demo):
目前,筆者用的是spring容器方式自動掃描任務并注入執行器,主要是文檔中提到的3.2 BEAN模式(方法形式)這種模式去構建執行器,這里有個坑是2.0.0及以下版本好像不支持@XxlJob注解。筆者再搭建執行器主要用到的版本是2.3.0。
第一步:引入maven依賴
<dependency>
? ? <groupId>com.xuxueli</groupId>
? ? <artifactId>xxl-job-core</artifactId>
? ? <version>2.3.0</version>
</dependency>
第二步:執行器的相關配置修改
### 調度中心部署跟地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執行器通訊TOKEN [選填]:非空時啟用,與上邊的調度中心保持一致
xxl.job.accessToken=
### 執行器AppName [選填]:執行器心跳注冊分組依據;為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
### 執行器注冊 [選填]:優先使用該配置作為注冊地址,為空時使用內嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執行器動態IP和動態映射端口問題。
xxl.job.executor.address=
### 執行器IP [選填]:默認為空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執行器注冊" 和 "調度中心請求并觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小于等于0則自動獲取;默認端口為9999,單機部署多個執行器時,注意要配置不同執行器端口;
xxl.job.executor.port=9999
### 執行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權限;為空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執行器日志文件保存天數 [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30
第三步:添加XxlJobConfig.java,初始化xxl-job配置。初始化參數與上邊的properties參數一一對應,用不到的可以自行去掉。
@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;
}
第四步:執行器任務編碼
通過@Component把javabean注入到spring容器中,然后@XxlJob("調度任務handler名稱"),調度中心新增定時任務時候會根據對應的handler執行對應的定時任務。
第五步:項目打包并運行,執行器到此完成。
如何使用調度任務:
第一步:新增執行器,AppName與執行器配置屬性xxl.job.executor.appname對應,主要是用于分組管理以及自動注冊,名稱隨意寫。appname不為空,執行器會自動注冊,如果為空則需手動錄入執行器機器ip。
第二步,新增調度任務,其中JobHandler名稱與執行器編碼過程中的命名一致,調度中心才能執行到對應的定時任務。配置完以上信息后,啟動定時任務。至此,調度中心以及執行器就搭建完成。