Spring Boot整合 xxl-job

目录

1. 介绍

2. SpringBoot整合xxl-job

2.1. 配置数据库

2.2. 运行调动中心

2.3. 整合业务服务

2.3.1. 引入maven依赖

2.3.2. 创建业务服务配置类

2.3.3. 创建定时任务


1. 介绍

xxl-job是一个分布式定时器任务派遣服务,这个项目主要有以下三部分组成 : 

  • xxl-job-admin: 调动中心,主要是提供任务管理平台的页面,需要把该模块单独打包作为一个服务部署,定时器再执行时,是通过该服务去调用我们的业务服务完成任务执行。
  • xxl-job-core:  公共依赖模块,在整合业务服务的时候,需要引入该依赖。
  • xxl-job-executor-samples:官方提供的demo。

2. SpringBoot整合xxl-job

2.1. 配置数据库

点击<xxl_job_gitee> 访问gitee获取该项目,在 /doc/db/tables_xxl_job.sql的路径中有SQL文件,需要将他导入到你自己的MySQL中。

表介绍: 

2.2. 运行调动中心

修改  xxl-job-admin 模块 application.properties 的配置信息。

修改MySQL为你数据库的真实信息 

 修改邮箱服务配置(可选非必须)

以上配置都修改完成后,运行 xxl-job-admin 这个服务,上面说过它是一个调度中心,主要是提供任务管理平台的页面。所以当你的业务服务部署了,这个模块也要作为一个服务单独部署,这样才可以管理你业务中定时任务。

2.3. 整合业务服务

接下来整合我们自己的业务服务,xxl-job-executor-sample-springboot 这个模块是官方提供的整合demo 模块,可以参考它整合自己的业务。

2.3.1. 引入maven依赖

     <!--    xxl-job依赖,maven仓库有该依赖,不需要手动安装   -->
        <dependency>
            <groupId>***.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.4.0</version>
        </dependency>

2.3.2. 创建业务服务配置类

注意:一定要确保你的 业务服务 和 xxl-job-admin 这个服务连接的是同一个数据库

application.properties配置

### 调度中心的地址 ,就是 xxl-job-admin 这个服务的地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### token (ke为空), 要和xxl-job-admin 中的a***essToken统一
xxl.job.a***essToken=default_token

### 执行器名称,可自定义
xxl.job.executor.appname=xxl-job-executor-sample
### 会将该地址注册到调度中心,调度中心会用该地址调度任务, 可为空默认就是 ip:port , 端口不可以和业务端口重复
xxl.job.executor.address=
### 可为空,默认获取本机ip
xxl.job.executor.ip=
xxl.job.executor.port=9999
### 运行日志所保存的路径
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 日志存放时间
xxl.job.executor.logretentiondays=30
创建:FrameLessXxlJobConfig 配置类
java">
import ***.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author yazb
 */
@Configuration
public class FrameLessXxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(FrameLessXxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.a***essToken}")
    private String a***essToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setA***essToken(a***essToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-***mons" 提供的 "I***Utils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-***mons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.i***utils.preferred-***works: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = i***Utils.findFirstNonLoopbackHostInfo().getIpAddress();
     */


}

2.3.3. 创建定时任务

创建一个测试任务

2.3.3.1:bean模式任务


import ***.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.***ponent;

/**
 * @author yazb
 * 测试
 */
@***ponent
public class TestTask {

    @XxlJob("hello")
    public void demoJobHandler() throws Exception {
        System.out.println("hello---->xxl-job");
        // default su***ess
    }
}

访问 xxl-job-admin 这个服务,在页面中运行定时任务。

用户:admin

密码:123456

 创建定时任务

运行定时任务

 

2.3.3.2:分片广播任务模式

分片广播模式,用来运行创建集群环境中的定时任务,所以需要我们再创建一个服务测试。

分片广播模式,会同时运行你集群中所有节点服务中定时任务。要想保证避免任务重复执行。可以采用 单机路由策略(如:第一台、一致性哈希)” + “阻塞策略(如:单机串行、丢弃后续调度)” 来规避,最终避免任务重复执行。

已经注册到调度中心的服务 

创建分布式广播任务

  /**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        System.out.println("测试服务 9998-----》");

    }
转载请说明出处内容投诉
CSS教程_站长资源网 » Spring Boot整合 xxl-job

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买