XXL-JOB的配置與使用

目錄

一、什么是XXL-JOB?

二、Java主流三大定時器技術選型

三、XXL-JOB的一些特性:

四、XXL-JOB與項目結合

五、執行器(任務調度中心):

一、什么是XXL-JOB?

??XXL-JOB是一個輕量級分布式任務調度框架,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線,開箱即用。

二、Java主流三大定時器技術選型

??選型時原則:少服務器 后期維護方便 增加任務省事而且快捷 不涉及啟停服務

1、Quartz

????優點:支持集群部署

????缺點:沒有自帶的管理界面;調度邏輯和執行任務耦合在一起;維護需要重啟服務

????總結:針對目前項目情況,利弊相同

2、xxl-job

????優點:支持集群部署;提供運維界面維護成本小;自帶錯誤預警;相對elastic-job來說不需要額外的組件(zookeeper);支持調度策略;支持分片;文檔齊全

????缺點:相對Quartz來說需要多部署調度中心

????總結:針對目前項目情況,利大于弊

3、elastic-job

????優點:支持集群部署;維護成本小

????缺點:elastic-job 需要 zookeeper,zookeeper 集群高可用至少需要三臺服務器

????總結:針對目前項目情況,弊大于利

??小結:綜合選型原則及三個定時任務框架的優缺點和目前項目的狀況,建議選用xxl-job。

三、XXL-JOB的一些特性:

??1、執行失敗可以查看日志

??2、支持郵件報警

??3、路由策略支持輪詢等策略,可以減輕執行服務器的壓力

??4、輪詢時間等參數修改后立即生效

??5、執行器有問題或新增,快速識別

??6、調度中心高可用,調度中心可以集群部署(集群部署的機器時鐘必須同步),如果調度中心沒有做負載在執行器的配置中需要配多個地址,如果調度中心配置負載則執行器配置負載地址即可

??7、執行器高可用(執行器可以集群部署)

四、XXL-JOB與項目結合

??以 springboot 框架為例:

1、添加Maven依賴:

<!--定時器xxljob-->

<dependency>

<groupId>com.xuxueli</groupId>

<artifactId>xxl-job-core</artifactId>

2.0.1

</dependency>? ? ? ?

2、執行器配置文件:

??在 resources 文件夾下新建配置文件 application.properties

### xxl-job admin address list, such as"http://address"or"http://address01,http://address02"

xxl.job.admin.addresses=192.168.22.67:8080/xxl-job-admin/

### xxl-job executor address

xxl.job.executor.appname=xxl-job-executor-sample

xxl.job.executor.ip=192.168.21.88

xxl.job.executor.port=9977

### xxl-job, access token

xxl.job.accessToken=/data/applogs/xxl-job/jobhandler/

### xxl-job log path

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

### xxl-job log retention days

xxl.job.executor.logretentiondays=-1

??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天,否則功能不生效。

??注意,XXL-JOB執行器的配置文件也可以交給Disconf進行托管。

3、執行器配置類

??新建一個執行器配置類,用來讀取執行器的配置信息。在config文件夾下新建一個名為 XxlJobConfig?的類,內容如下:

packagecom.tfjybj.physical.config;

importcom.xxl.job.core.executor.XxlJobExecutor;

importcom.xxl.job.core.executor.impl.XxlJobSpringExecutor;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.beans.factory.annotation.Value;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.ComponentScan;

importorg.springframework.context.annotation.Configuration;

/**

* xxl-job config

*

*@authorxuxueli 2017-04-28

*/

@Configuration

@ComponentScan(basePackages = "com.tfjybj.physical.provider.job")

publicclassXxlJobConfig{

privateLogger logger = LoggerFactory.getLogger(XxlJobConfig.class);

@Value("${xxl.job.admin.addresses}")

privateString adminAddresses;

@Value("${xxl.job.executor.appname}")

privateString appName;

@Value("${xxl.job.executor.ip}")

privateString ip;

@Value("${xxl.job.executor.port}")

privateintport;

@Value("${xxl.job.accessToken}")

privateString accessToken;

@Value("${xxl.job.executor.logpath}")

privateString logPath;

@Value("${xxl.job.executor.logretentiondays}")

privateintlogRetentionDays;

@Bean(initMethod = "start", destroyMethod = "destroy")

publicXxlJobSpringExecutorxxlJobExecutor(){

logger.info(">>>>>>>>>>> xxl-job config init.");

XxlJobSpringExecutor? xxlJobSpringExecutor? =newXxlJobSpringExecutor ();

? ? ? ? xxlJobSpringExecutor .setAdminAddresses(adminAddresses);

? ? ? ? xxlJobSpringExecutor .setAppName(appName);

? ? ? ? xxlJobSpringExecutor .setIp(ip);

? ? ? ? xxlJobSpringExecutor .setPort(port);

? ? ? ? xxlJobSpringExecutor .setAccessToken(accessToken);

? ? ? ? xxlJobSpringExecutor .setLogPath(logPath);

? ? ? ? xxlJobSpringExecutor .setLogRetentionDays(logRetentionDays);

returnxxlJobSpringExecutor ;

? ? }

}

XxlJobConfig?配置類有兩點需要注意:

組件掃描使用?@ComponentScan?注解,掃描 com.example.demo.jobhandler 包,將其中的任務處理器加載至 Spring 容器。

獲取執行器實例 xxlJobExecutor() 方法會實例化一個 XXL-JOB 執行器對象,執行器初始化時調用它的 start() 方法,執行器銷毀時調用它的?destroy()?方法。

4、建立任務執行器:

??在 provider 下的 job 下新建 job 測試文件:JobTest.java

packagecom.tfjybj.physical.provider.job;

importcom.xxl.job.core.biz.model.ReturnT;

importcom.xxl.job.core.handler.IJobHandler;

importcom.xxl.job.core.handler.annotation.JobHandler;

importlombok.extern.slf4j.Slf4j;

importorg.springframework.stereotype.Component;

importjava.io.Serializable;

@JobHandler(value = "JobTest")

@Component

@Slf4j

publicclassJobTestextendsIJobHandlerimplementsSerializable{

@Override

publicReturnTexecute(String s)throwsException{

try{

System.out.println("測試~~~");

/*測試數據*/

returnSUCCESS;

}catch(Exception e){

? ? ? ? ? ? e.printStackTrace();

returnFAIL;

? ? ? ? }

? ? }

}

五、執行器(任務調度中心):

訪問地址:http://192.168.22.67:8080/xxl-job-admin/jobinfo,登錄 XXL-JOB 調度中心

1、任務管理:

??新增任務,更新任務:

2、調度日志:

3、執行器管理:

??新增執行器:

注意,AppName的取值應該和示例工程的?application.properties?文件中的?xxl.job.executor.appname?字段的取值相同,注冊方式應該選擇自動注冊。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容