提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 1.xxl-job
- 1. 1 發展歷史
- 1.2 XXL-JOB的系統架構
- 1.3 xxl-job與其他框架對比
- 2. XXL-JOB的使用
- 2.1 準備工作- 配置調度中心
- XXL-JOB的數據表
- 2.2 配置執行器
- 1 引入依賴包:
- 2 配置配置項
- 3 創建XxlJobConfig.java
- 2.3 配置可視化界面
- 1. 配置數據庫路徑以及其他信息
- 2. 配置登陸賬號密碼
- 3. 啟動項目:XxlJobAdminApplication.java
- 4. 登陸可視化界面 地址: http://10.4.7.214:8080/xxl-job-admin/jobinfo
- 2.4 開發第一個任務 Hello,world
- 1.首先在配置好了執行器的微服務下創建定時任務代碼:
- 2.依次啟動微服務項目(Eureka,config…等)
- 3.啟動調度中心: XxlJobAdminApplication.java
- 4.登錄調度中心,輸入賬號密碼,然后配置執行器
- 5.進入==任務管理==頁面
- 6.點擊新增任務,配置對應相關參數
- 7.返回任務管理頁面
- 8.如果點擊執行任務,則會只執行一次
- 9.如果點擊日志,則跳轉至調度日志頁面
- 10.如果點擊啟動,則直接==啟動定時任務(按照Corn表達式定時執行任務==),并且啟動按鈕會變成停止按鈕
- 11.如果點擊編輯,則進入定時任務的更新頁面
- 2.5 運行報表
1.xxl-job
- XXL-JOB是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線,開箱即用。
1. 1 發展歷史
源碼地址: https://github.com/xuxueli/xxl-job
中文文檔:https://www.xuxueli.com/xxl-job/
1.2 XXL-JOB的系統架構
- ? xxl-job框架主要用于處理分布式的定時任務,其主要由調度中心和執行器組成。
調度模塊(調度中心):
- 負責管理調度信息,按照調度配置發出調度請求,自身不承擔業務代碼。調度系統與任務解耦,提高了系統可用性和穩定性,同時調度系統性能不再受限于任務模塊;
- 支持可視化、簡單且動態的管理調度信息,包括任務新建,更新,刪除,GLUE開發和任務報警等,所有上述操作都會實時生效,同時支持監控調度結果以及執行日志,支持執行器Failover。
執行模塊(執行器):
- 負責接收調度請求并執行任務邏輯。任務模塊專注于任務的執行等操作,開發和維護更加簡單和高效;
- 接收“調度中心”的執行請求、終止請求和日志請求等。
調度中心和執行器兩個模塊分開部署,相互分離,兩者之間通過RPC進行通信,其中調度中心主要是提供一個平臺,管理調度信息,發送調度請求,自己不承擔業務代碼,而執行器接受調度中心的調度執行業務邏輯。
1.3 xxl-job與其他框架對比
分布式定時任務調度的框架:quartz、elastic-job、xxl-job
2. XXL-JOB的使用
2.1 準備工作- 配置調度中心
下載官方源碼
- 將項目中 /xxl-job/doc/db/ 目錄下的 tables_xxl_job.sql 的數據庫表導入數據庫
XXL-JOB的數據表
2.2 配置執行器
1 引入依賴包:
<!-- xxl-job-core --><dependency><groupId>com.cdmtc</groupId><artifactId>xxl-job-core</artifactId><version>2.0.2</version></dependency>
2 配置配置項
XXL-JOB執行器的相關配置項的意義,如下所示:
-
xxl.job.admin.addresses
調度中心的部署地址。若調度中心采用集群部署,存在多個地址,則用逗號分隔。執行器將會使用該地址進行”執行器心跳注冊”和”任務結果回調”。 -
xxl.job.executor.appname
執行器的應用名稱,它是執行器心跳注冊的分組依據。 -
xxl.job.executor.ip
執行器的IP地址,用于”調度中心請求并觸發任務”和”執行器注冊”。執行器IP默認為空,表示自動獲取IP。多網卡時可手動設置指定IP,手動設置IP時將會綁定Host。 -
xxl.job.executor.port
執行器的端口號,默認值為9999。單機部署多個執行器時,注意要配置不同的執行器端口。 -
xxl.job.accessToken
執行器的通信令牌,非空時啟用。 -
xxl.job.executor.logpath
執行器輸出的日志文件的存儲路徑,需要擁有該路徑的讀寫權限。 -
xxl.job.executor.logretentiondays
執行器日志文件的定期清理功能,指定日志保存天數,日志文件過期自動刪除。限制至少保存3天,否則功能不生效。
3 創建XxlJobConfig.java
package com.cdmtc.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author xuxueli 2017-04-28*/
@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${record.xxl.job.admin.addresses}")private String adminAddresses;@Value("${record.xxl.job.executor.appname}")private String appName;@Value("${record.xxl.job.executor.ip}")private String ip;@Value("${record.xxl.job.executor.port}")private int port;@Value("${record.xxl.job.accessToken}")private String accessToken;@Value("${record.xxl.job.executor.logpath}")private String logPath;@Value("${record.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;}/*** 針對多網卡、容器內部署等情況,可借助 "spring-cloud-commons" 提供的 "InetUtils" 組件靈活定制注冊IP;** 1、引入依賴:* <dependency>* <groupId>org.springframework.cloud</groupId>* <artifactId>spring-cloud-commons</artifactId>* <version>${version}</version>* </dependency>** 2、配置文件,或者容器啟動變量* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'** 3、獲取IP* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();*/}
XxlJobConfig配置類有兩點需要注意:
- 組件掃描
第2行使用@ComponentScan注解,掃描com.example.demo.jobhandler包,將其中的任務處理器加載至Spring容器。 - 獲取執行器實例
第29行的xxlJobExecutor()方法會實例化一個XXL-JOB執行器對象,執行器初始化時調用它的start()方法
2.3 配置可視化界面
1. 配置數據庫路徑以及其他信息
2. 配置登陸賬號密碼
- 可修改為其他賬號密碼
3. 啟動項目:XxlJobAdminApplication.java
4. 登陸可視化界面 地址: http://10.4.7.214:8080/xxl-job-admin/jobinfo
- 【可先等配置好了執行器再進行登陸,端口可自行配置或修改,默認是8080,這里演示的端口號為8888】
2.4 開發第一個任務 Hello,world
1.首先在配置好了執行器的微服務下創建定時任務代碼:
2.依次啟動微服務項目(Eureka,config…等)
3.啟動調度中心: XxlJobAdminApplication.java
4.登錄調度中心,輸入賬號密碼,然后配置執行器
5.進入任務管理頁面
6.點擊新增任務,配置對應相關參數
7.返回任務管理頁面
8.如果點擊執行任務,則會只執行一次
9.如果點擊日志,則跳轉至調度日志頁面
10.如果點擊啟動,則直接啟動定時任務(按照Corn表達式定時執行任務),并且啟動按鈕會變成停止按鈕
- 如果沒有點擊停止按鈕的話,則會一直是啟動狀態,如果點擊了停止按鈕,則定時任務停止,Corn表達式不再生效;
11.如果點擊編輯,則進入定時任務的更新頁面
-
如果點擊刪除,則直接刪除此定時任務配置;
-
如果點擊執行器,則展示該執行器下的對應定時任務。
-
任務描述和JobHandler則為搜索條件,對定時任務配置進行搜索;
2.5 運行報表
- 可視化直觀展示定時任務運行情況
- 圖示如下: