xxl-job任務(wù)調(diào)度中心文檔
[TOC]
0.簡(jiǎn)介
??XXL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡(jiǎn)單、輕量級(jí)、易擴(kuò)展?,F(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。
??本文只介紹xxl-job的簡(jiǎn)單使用
1.xxl-job管理端
1.1 配置
1.1.2 xxl-admin服務(wù)端
### 調(diào)度中心數(shù)據(jù)庫鏈接,xxl-job相關(guān)表存放的數(shù)據(jù)庫
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
### 報(bào)警郵箱
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
### 調(diào)度中心通訊TOKEN [選填]:非空時(shí)啟用;
xxl.job.accessToken=
### 調(diào)度中心國際化配置 [必填]: 默認(rèn)為 "zh_CN"/中文簡(jiǎn)體, 可選范圍為 "zh_CN"/中文簡(jiǎn)體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調(diào)度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調(diào)度中心日志表數(shù)據(jù)保存天數(shù) [必填]:過期日志自動(dòng)清理;限制大于等于7時(shí)生效,否則, 如-1,關(guān)閉自動(dòng)清理功能;
xxl.job.logretentiondays=30
1.1.2 xxl-job客戶端
采用配置文件屬性值注入的方式
配置文件:application.yml
xxl:
job:
admin:
addresses: http://localhost:8080/job-admin/ #job管理端地址,如果是集群模式通過nginx或者LB的VIP->domain 的訪問地址
accessToken: # 管理端的token,沒有則空
executor:
appname: xxl-job-executor-vending-test #執(zhí)行器名稱,保證在管理端是唯一的
ip: #可空,讀取物理網(wǎng)卡第一個(gè)IP
port: 9998 # 調(diào)度通道監(jiān)聽端口,建議都在9900~9999之間
logpath: /home/mbApp/billbook/log/xxljob # job執(zhí)行的日志目錄
logretentiondays: -1 # 日志滾動(dòng)天數(shù) -1 不限制
配置類:XxlJobConfig.class
@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(initMethod = "start", destroyMethod = "destroy")
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;
}
}
1.2 部署啟動(dòng)
xxl-job管理端地址:任務(wù)調(diào)度中心
可訪問代表啟動(dòng)成功
1.3 界面說明(演示xxl-job版本為2.0.2)
1.3.1 執(zhí)行器管理
??一個(gè)獨(dú)立的應(yīng)用綁定著一個(gè)執(zhí)行器,例如對(duì)賬項(xiàng)目綁定著對(duì)賬執(zhí)行器,項(xiàng)目啟動(dòng)后,可以在執(zhí)行器管理中的【OnLine 機(jī)器地址】這一列查看到綁定成功的ip+端口,顯示即表示在管理端注冊(cè)成功,至此啟動(dòng)的應(yīng)用可提供被管理端執(zhí)行相應(yīng)的job
執(zhí)行器需要進(jìn)行創(chuàng)建
執(zhí)行器檢測(cè)采用的是心跳檢測(cè),所以項(xiàng)目關(guān)閉時(shí)會(huì)有延遲

1.3.2 任務(wù)管理
??選擇相應(yīng)的執(zhí)行器,對(duì)賬項(xiàng)目中創(chuàng)建的job對(duì)應(yīng)這里的一個(gè)任務(wù)
@JobHandler(value="vendingJobHandler")
@Slf4j
@Component
public class VendingJobHandler extends IJobHandler {
@Autowired
private PmsVendingWarnService vendingWarnService;
@Override
public ReturnT<String> execute(String param) {
XxlJobLogger.log("\n██【售貨機(jī)庫存預(yù)警記錄】: Start\n██ 參數(shù):{}",param);
// 1.預(yù)警記錄
vendingWarnService.vendingWarning();
XxlJobLogger.log("\n██【售貨機(jī)庫存預(yù)警記錄】: End");
return SUCCESS;
}
}


cron:定義任務(wù)執(zhí)行的規(guī)律
JobHandler:對(duì)應(yīng)項(xiàng)目中創(chuàng)建的job類
1.3.3 日志管理
??在項(xiàng)目中穿插使用XxlJobLogger.log(..)來打日志(使用方式與Slfj相似),方便調(diào)試和檢查問題,在每個(gè)任務(wù)中可查看執(zhí)行日志
??PS:日志只支持字符串,日志展示的類需要使用該類的toString,例如XxlJobLogger.log("\n██【設(shè)備商品信息】\n██{}",pmsTermGoods.toString());
