SpringBoot專案接入分散式任務排程平臺xxl-job(2.0.2)說明

strong發表於2024-05-30

簡介

如果是單體專案,定時任務寫到專案中就能滿足需要,當需要部署叢集的時候就會出現問題,接入統一的任務除錯平臺是一個不錯的選擇。接入xxl-job挺簡單的,只需要幾步,好記性不如爛筆頭,記錄一下步驟,方便以後使用。

本次使用軟體的相關版本:

xxl-job版本:2.0.2

spring-boot:2.3.6.RELEASE

操作步驟:

1、在需要接入專案的pom.xml中新增xxl-job的引用

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

2、在application.yml中新增xxl-job相關配置

# XXL-JOB相關配置
xxl:
  job:
    accessToken:
    admin:
      addresses: http://192.168.110.180:8888/xxl-job-admin
    executor:
      appname: ai-data-mining-service
      address:
      ip:
      port: 9993
      logpath: ./log
      logretentiondays: 10

解釋一下其中的名詞

accessToken:是安全令牌,用於驗證執行器(executor)和排程中心(admin)之間的通訊,這裡為空,意味著沒有設定安全令牌;

addresses:是xxl-job排程中心的地址;

appname:是要接入的專案的執行器的名稱,用於標識該執行器;

address:是執行器的地址,通常用於手動註冊執行器,留空表示自動獲取;

ip:執行器的 IP 地址,通常用於手動註冊執行器的 IP 地址,留空表示自動獲取;

port:執行器的埠號,用於執行器服務的監聽埠;

logpath:日誌儲存路徑,執行器執行的日誌檔案將儲存在這個路徑中;

logretentiondays:日誌保留天數,表示日誌檔案的保留時間,單位為天。

3、在專案中新增配置類

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * XXL作業配置
 *
 * @author
 * @date
 */
@Configuration
@Slf4j
public class XxlJobConfig {

    @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() {
        log.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;
    }
}

 4、實現xxl-job的IJobHandler介面

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @author
 * @date
 */
@JobHandler(value = "DmAiPromptWordsJob")
@Component
@RequiredArgsConstructor
@Slf4j
public class DmAiPromptWordsJobHandler extends IJobHandler {
    @Override
    public ReturnT<String> execute(String s) throws Exception {
        log.info("專案日誌列印");
        XxlJobLogger.log("xxl-job日誌列印");
        return ReturnT.SUCCESS;
    }
}

其中@JobHandler(value = "DmAiPromptWordsJob"),註解用來標識這個類是一個 xxl-job 的任務處理器

5、在xxl-job管理介面中新增執行器,如下圖:

註冊方式,選擇“自動註冊”

6、在對應的執行器中新增任務管理,如下圖:

重點填寫紅色框的部分即可;

總結

按照步驟操作之後,定時任務就自動執行了,這樣的話部專案署叢集也不受影響了,目前xxl-job也存在叢集的問題,後續再研究。

相關文章