xxl-job接入到springboot项目 手把手教学


XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。其经受了大量互联网公司试验与使用!

项目中可能或多或少的会使用到定时调度,如果定时调度任务很多,这时候呢,就可以考虑使用xxl-job 其提供了强大的web管理界面 以及分布式调度特性!

(一)xxl-job下载与入门

image-20200801215554066

github源码地址:点击直达
我们下载xxl-job的原因,是需要其中的分布式调度中心 ,所有的定时调度任务都离不开调度中心

拉取代码:

image-20200801220102054

下载完成后,查看其项目结构

image-20200801221630866

至于每个模块的含义,直接上官网说明

image-20200801222018980

接下来,开始我们的正题操作

按照官网指引(本文也就是将官网指引翻译的更加白话而已)

xxl-job 官网文档 : https://www.xuxueli.com/xxl-job/#1.1 概述

(1)初始化调度数据库

image-20200801222259581navicat操作:直接将sql文件拖到数据库中,其会自动创建一个xxl_job的数据库并创建好表信息

image-20200801222746306

(2)配置xxl-job调度中心

即xxl-job-admin项目

image-20200801223151158

其就是一个springboot开发的web项目,,,
咱们启动前,肯定需要看下项目端口,以及开头配了数据库,如果当前项目有在使用的话还需要修改application.properties

image-20200801223427643

配置文件内容很多,具体的可以去官网查看 例如国际化啊,报警邮箱设置等等

(3)启动调度中心

springboot项目 配置没问题了直接main方法启动即可

image-20200801223633901

image-20200801223803299

由于我仅仅修改了数据源配置,其余默认,发现启动占用8080端口 并设置了 路径前缀为

/xxl-job-admin

那么我们访问则为:http://localhost:8080/xxl-job-admin ,其就是我们的调度中心地址,这个地址后续其余项目整合xxl-job,必须要使用的

image-20200801223931558

默认登录账号 “admin/123456”

image-20200801224107573

调度中心启动后,就没有什么其余额外操作了


(4)执行器简单使用

源码中,也向我们提供了springboot项目使用示例

这里做一个概念说明: xxl-job-admin 为调度中心 其余执行任务的项目呢 例如下文的 smaple-xxxxboot 等 为执行器项目 即执行调度任务的项目!

咱们一起来看看!

image-20200801224445520

image-20200801224600699

image-20200801224918757

这就是一个springboot执行器 中的重要内容

咱们初略的看一下

XxlJobConfig :就是读取了项目配置文件后,设置了一个配置bean

image-20200801225047080

SampleXxlJob:则是表明了注入到spring容器 然后使用了 XxlJob 注解

image-20200801225134397

项目配置文件:则是定义了一些配置 供XxlJobConfig 读取

image-20200801225453894

导入xxl-job-core包依赖

启动执行器!

image-20200801225652383

调度中心启动任务!

image-20200801231254968

image-20200801231321501

(二)XXL-JOB接入到我们自己的springboot项目

image-20200801220540924

image-20200801220707188

接下来,按照示例 进行整合

步骤一:maven依赖

(1)引入 maven依赖xxl-job-core,可以在maven中央仓库搜索后直接引入

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

步骤二:执行器配置

配置我们自己springboot项目的 配置文件 application.xxxx

### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
  ### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
  ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=springboot-xxl-executor
  ### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
  ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
  ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
  ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
  ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
步骤三:执行器组件配置

即 将示例的 XxlJobConfig copy到我们的项目中

image-20200801232416055
具体的代码如下

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(com.leilei.config.XxlJobConfig.class);

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

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

    @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.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

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


}
步骤四:编写我们的调度任务
BEAN模式(方法形式)
@Component
public class TaskDemo {

    @XxlJob("leiTask")
    public ReturnT<String> myFirstTask(String param) throws Exception {
        XxlJobLogger.log("myFirstTsk");
        System.out.println(param);
        return ReturnT.SUCCESS;
    }
}

这里的返回类型以及传参需要严格按照其格式来编写

GLUE模式(Java)

直接在调度中心编写java代码,,,

步骤五:项目启动

咱们首先关闭我们xxl自带的 springboot执行器的示例项目

由于未关闭定时任务,所以关闭执行器后,执行任务就一直在报错了

image-20200801234233397

image-20200801234156202

image-20200801234246874

启动我们自己的springboot 执行器项目

项目端口 6666 执行器端口 9999

image-20200801234017671

步骤六:调度中心配置与启动任务

新建了执行器后,需要额外再调度中心设置

image-20200801234455228

选择手动录入则需要填写执行器地址,自动注册则不需要

AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;
注册方式:调度中心获取执行器地址的方式;
    自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
    手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;

image-20200801234743536

image-20200801235006542

接下来咱们新增一个该执行器下的任务

image-20200801234932156

image-20200801235222787

当点击启动任务,即打印出了信息

image-20200801235335947

image-20200801235302798

测试:glue java模式

image-20200802093149468

image-20200802093232380

image-20200802093501332

额,报错了

image-20200802093711026

看提示,找不到该注解,于是回头查看glue代码,发现没有引入其所在依赖路径位置,加进去试试

image-20200802093801008

保存,再次启动

image-20200802093853944

注意哟,此次我的调度任务代码在项目中是不存在的,而是在调度中心编写的代码哟!也是能在我们自己的springboot项目中实现定时调度的!




那么xxl-job 接入到springboot项目的流程以及简单使用就结束了,我们开发中,最常用的还是Bean 类型 方法模式!
XXL-JOB 的功能还有很多细节以及功能性我这里没有演示,建议看官结合官网文档,根据项目需求进行合理使用!

  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值