springboot2 xxl-job 调度中心


1,下载自己需要的版本

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

2,https://gitee.com/xuxueli0323/xxl-job/releases (墙内推荐)

3,墙内网络推荐使用第二个地址,笔者下 2.2.0 版本

spring boot任务调度 springboot调度中心_xml

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: 17600909499@163.com
    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,添加执行器

spring boot任务调度 springboot调度中心_maven_02

2,添加任务

spring boot任务调度 springboot调度中心_maven_03

3,配置串行任务的思路

在日常开发中,我们的调度所需的数据来源可能会依赖另一个调度的结果,这是我们一般会采取两种解解决方式:

1,估算依赖调度的执行时间,将调度时间配置到依赖调度执行完成后的时间

2,将调度作为依赖调度的子任务,配置串行任务

从上图的配置我们可以看出,xxl-job 是支持配置串行任务的

具体配置思路:将一个调度作为另一个调度的子任务,任意填写一个 cron,然后状态设置为停止