1. 程式人生 > 實用技巧 >xxl-job 排程中心

xxl-job 排程中心

1,下載自己需要的版本

1,https://github.com/xuxueli/xxl-job

2,https://gitee.com/xuxueli0323/xxl-job/releases (牆內推薦)

3,牆內網路推薦使用第二個地址,筆者下 2.2.0 版本

2,整合到自己的專案

將下載好的專案中 xxl-job-admin 拷貝到自己的 springcloud 專案中

建立相應的資料庫並執行指令碼:xxl-job\doc\db\tables_xxl_job.sql

1,修改 pom 檔案依賴
<project xmlns="http://maven.apache.org/POM/4.0.0"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.5.RELEASE</version>
		<relativePath/>
	</parent>
    <groupId>com.hwq</groupId>
	<artifactId>sc-xxl-job-admin</artifactId>
    <version>1.0.0</version>
	<packaging>jar</packaging>

	<dependencies>
		<!-- WEB 組建 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 模板組建 Freemarker -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>
		<!-- 郵件組建 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
		<!-- 專案健康健康 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- 資料庫 MySQL 連線依賴 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 資料持久化框架 MyBatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
		</dependency>
		<!-- 排程核心依賴 -->
		<dependency>
			<groupId>com.xuxueli</groupId>
			<artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
		</dependency>

		<!-- 測試依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<!-- 打包後名稱 -->
		<finalName>sc-xxl-job-admin</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
2,修改配置檔案參考

application.yml

server:
  # 埠
  port: 1081
  # Servlet 訪問專案名
  servlet:
    context-path: /xxl-job-admin

spring:
  mvc:
    servlet:
      # 載入 DispatcherServlet 的啟動優先順序
      load-on-startup: 0
    # 接管的靜態資源路由規則
    static-path-pattern: /static/**
  resources:
    # 靜態資源路徑
    static-locations: classpath:/static/
  freemarker:
    # 模板地址
    template-loader-path: classpath:/templates/
    # 模板字尾
    suffix: .ftl
    # 字元編碼
    charset: UTF-8
    # HTTP 請求物件的物件名稱
    request-context-attribute: request
    settings:
      number_format: 0.##########
  # 資料來源
  datasource:
    url: jdbc:mysql://192.168.200.100:3306/xxljob
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 920619
  # 郵件配置
  mail:
    host: smtp.163.com
    port: 25
    username: [email protected]
    password: FYZOEDLNWIHRBTQY

mybatis:
  # XML 對映地址
  mapper-locations: classpath:/mybatis-mapper/*Mapper.xml

xxl:
  job:
    # 鑑權值
    accessToken: huangweiqiang
    # 語言包: zh_CN 中文、zh_TC 臺灣、en 英文
    i18n: zh_CN
    # 觸發池最大值
    triggerpool:
      fast:
        max: 200
      slow:
        max: 100
    # 日誌保留日(單位:天)
    logretentiondays: 30

# 健康檢查
management:
  server:
    servlet:
      context-path: /actuator
  health:
    mail:
      enabled: false
3,執行,訪問

1,訪問地址:192.168.200.100:1081/xxl-job-admin

2,預設的賬號密碼:admin/123456

3,執行器配置

pom 依賴

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

配置檔案

xxl:
  job:
    admin:
      # 排程中心服務端地址
      addresses: http://127.0.0.1:1081/xxl-job-admin
    # 鑑權值
    accessToken: huangweiqiang
    executor:
      # 執行器的名稱
      appname: ${spring.application.name}
      # 執行器的 IP
      ip: ${spring.cloud.client.ip-address}
      # 執行器的 埠
      port: 2121
      # 執行器日誌的儲存路徑
      logpath: ${user.dir}/z-file/logging/${spring.application.name}/job
      # 執行日誌的儲存時間
      logretentiondays: 30

在方法上新增 @XxlJob 註解就變成了執行器

package com.hwq.admin.back.executor;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hwq.common.model.dto.TestDTO;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class TestExecutor {

    @Autowired
    private ObjectMapper objectMapper;

    @XxlJob("test/test1")
    public ReturnT<String> test1(String param) throws JsonProcessingException {
        TestDTO testDTO = objectMapper.readValue(param, TestDTO.class);
        System.out.println(testDTO);
        return new ReturnT<>(ReturnT.SUCCESS_CODE, "排程執行成功");
    }

    @XxlJob("test/test2")
    public ReturnT<String> test2(String param) throws JsonProcessingException {
        TestDTO testDTO = objectMapper.readValue(param, TestDTO.class);
        System.out.println(testDTO);
        return new ReturnT<>(ReturnT.SUCCESS_CODE, "排程執行成功");
    }

}

4,頁面配置

1,新增執行器

2,新增任務

3,配置序列任務的思路

在日常開發中,我們的排程所需的資料來源可能會依賴另一個排程的結果,這是我們一般會採取兩種解解決方式:

1,估算依賴排程的執行時間,將排程時間配置到依賴排程執行完成後的時間

2,將排程作為依賴排程的子任務,配置序列任務

從上圖的配置我們可以看出,xxl-job 是支援配置序列任務的

具體配置思路:將一個排程作為另一個排程的子任務,任意填寫一個 cron,然後狀態設定為停止