在spring boot中3分鐘上手分佈式任務調度系統xxl-job

xxl-job在鼎鼎大名的quartz任務調度系統上進行了二次封裝,變得更好用了 項目地址:github.com/xuxueli/xxl… 官方文檔:www.xuxueli.com/xxl-job/#/java

雖然官方文檔也很全,很詳細,但須要多花些時間上手,如下是我根據官方文檔整理出的快速上手步驟,能夠減小上手須要花費的時間和一些生產使用須要注意的點mysql

在mysql中執行如下sql tables_xxl_job.sqlgit

這個sql建立xxl-job的數據庫和調度任務的表 記下mysql的地址,用戶名和密碼github

使用docker一鍵啓動調度中心spring

docker run -d --rm \
    -e PARAMS="--spring.datasource.url=jdbc:mysql://你的mysql數據庫ip:3306/xxl-job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=你的mysql數據庫用戶名 --spring.datasource.password=你的mysql數據庫密碼" \
    -p 8680:8080 \
    --name xxl-job-admin xuxueli/xxl-job-admin:2.0.2
複製代碼

在瀏覽器中使用默認用戶名和密碼 admin 123456 登錄查看效果 sql

將一個spring boot項目變成一個xxl-job任務的執行器

在現有項目的pom.xml加上xxl-job core依賴docker

<!-- xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.0.2</version>
</dependency>
複製代碼

在現有的配置文件src/main/resources/application.properties文件中添加xxl-job調度中心的配置shell

### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8680/xxl-job-admin

### xxl-job executor address
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999

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

### xxl-job log path
xxl.job.executor.logpath=logs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1
複製代碼

而後在spring boot中把xxl job註冊成服務,參考: XxlJobConfig.java 核心代碼以下:數據庫

@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 boot了,通常都會在任務中調用spring boot項目的資源,好比 jpa, service, util等

在spring boot項目中建立一個測試任務,好比 TestJobHandler.java 核心代碼以下

@JobHandler(value="testJobHandler")
@Component
public class TestJobHandler extends IJobHandler {

    private final InService inService;

    @Autowired
    public TestJobHandler(InService inService) {
        this.inService = inService;
    }

    @Override
    public ReturnT<String> execute(String param) throws Exception {
        XxlJobLogger.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobLogger.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }

        inService.xxl();
        return SUCCESS;
    }
}
複製代碼

其中inService即是spring boot中的一個普通的service

執行任務

而後在調度中心建立任務運行咱們剛纔建立的任務

點擊啓動任務,在任務執行代碼中斷個點查看效果

任務觸發成功!

同時能夠在調度中心看到執行的記錄和日誌

一些注意的點

調度中心的JobHandler必須和代碼裏的JobHandler的值一致才能匹配到執行的任務

生產環節使用要保證任務執行客戶端的高可用,開啓高可用參考: 執行器集羣

調度中心也須要高可用,參考:調度中心集羣

通常微服務都在容器裏部署,容器部署須要特別注意ip地址,參考:XxlJobConfig.java 的配置

相關文章
相關標籤/搜索