SpringBoot集成XXL-JOB


第一步:下載xxl-job工程代碼:

https://gitee.com/dongfangxuri/springboot

下下來工程如下:

 

 admin--->>后天管理,用於配置xxl-job各項數據

sample-springboot---->> 一個springboot集成xxl-job的demo 我們不用這個嗎,用自己的

 core----------->> xxjob依賴的核心包,集成時候需要

 

 

簡單說:

集成xxl-job需要兩個節點:

1:admiin:后台管理

2:項目節點:用於集成xxljob

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

開始集成:

a:下下來項目找到:xxjob\xuxueli0323-xxl-job-master\xxl-job\doc\db

 

 

 新建數據庫導入基表:

 

 

 

打開xxl-job-admin:

修改application.properties:

新增時區屬性,否則亂碼,然后啟動admin 

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=UTC

  

訪問:

http://localhost:8080/xxl-job-admin 賬戶/密碼:admin/123456

登錄后台:

 

 

 看到該頁面即可

 

然后集成xxl-job:

自己項目引入xxl-job核心包:

<!--xxjob-->
        <!-- https://mvnrepository.com/artifact/com.githup.liuyanggithup/xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0-SNAPSHOT</version>  我這里是最新的2.0 這個根據自己情況看 與剛才下下來的core項目版本需要一致
        </dependency>

 

首先在springboot項目中新增如下配置:

### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"  即剛才啟動的admin的地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin    

### xxl-job executor address 執行器的名稱 這個很重要
xxl.job.executor.appname=demo 與后台管理配置執行器名稱一致
xxl.job.executor.ip=127.0.0.1  
xxl.job.executor.port=9999  如果是集群 不同的節點需要有不同的端口 比如 一個9999 一個9998

### xxl-job, access token
xxl.job.accessToken=

### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=30

 

 

初始化xxl-job配置:

package com.example.demo.util;

import com.xxl.job.core.executor.XxlJobExecutor;
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;

@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 XxlJobExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        System.out.println("初始化成功了。。。。。。。。。。");
        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
        xxlJobExecutor.setAdminAddresses(adminAddresses);
        xxlJobExecutor.setAppName(appName);
        xxlJobExecutor.setIp(ip);
        xxlJobExecutor.setPort(port);
        xxlJobExecutor.setAccessToken(accessToken);
        xxlJobExecutor.setLogPath(logPath);
        xxlJobExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobExecutor;
    }
}

 

定時任務:

package com.example.demo.schedule;

import com.example.demo.util.MyUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyTask1 extends IJobHandler {

    @Override
    public ReturnT<String> execute(String s) throws Exception {
        System.out.println("this is " + MyUtil.port + " MyTask1");
        testHelloWord();
        return ReturnT.SUCCESS;
    }

    public void testHelloWord() {
        System.out.println("hello word " + MyUtil.port + " MyTask1");
    }
}

   啟動項目無報錯,集成完畢。

 

 

配置后台管理:

 

 

 1:新增執行器:

 

 

 appName要與配置文件配置的xxl.job.executor.appname一模一樣 不然找不到(重點):

自動注冊會發現注冊到admin的ip,我這里是集群兩個節點,所以是兩個(xxl.job.executor.port 需不同 )

保存

進入任務管理:

 

 

 

新增任務:

執行器即是剛才新建的執行器,選擇一個即可,

 

 

 

這里有兩個重點:

1:路由策略:第一個即集群環境下選擇第一個節點執行,我們這里選擇輪詢,這次a,下次b

2:運行模式:我們選擇GLUE(JAVA):即繼承:

IJobHandler的這種實現方式:
package com.example.demo.schedule;

import com.example.demo.util.MyUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyTask1 extends IJobHandler {

    @Override
    public ReturnT<String> execute(String s) throws Exception {
        System.out.println("this is " + MyUtil.port + " MyTask1");
        testHelloWord();
        return ReturnT.SUCCESS;
    }

    public void testHelloWord() {
        System.out.println("hello word " + MyUtil.port + " MyTask1");
    }
}

最后,需包這段代碼復制到:(重點)

 

 

 

進入:

 

 

 

原則上,這里代碼與程序代碼一模一樣,否則執行會有差異,根據情況去定奪

這樣,我們即完成了springboot繼承xxl-job的任務

 

但是一般開發中不可能是單任務單節點,所以,我們看下多任務,集群部署的配置,大同小異:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我這里是兩個定時任務:

 

 

 所以需要在admin配置兩個:

 

 

 看我們執行器是一個地址列表:

 

 

 

所以會根據路由模式,去輪詢

輪詢結果:

 

 

 

 

 

 間隔2秒依次執行

 

 

在調度日志查看調度情況:

我這里配置如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM