xxl-job搭建与使用

x33g5p2x  于2022-02-12 转载在 其他  
字(3.8k)|赞(0)|评价(0)|浏览(366)

前言

XL-JOB是一个分布式任务调度平台,开发迅速、学习简单、轻量级、易扩展。其经受了大量互联网公司试验与使用,前身是美团内部的一个产品,后来经守住考验得到广泛使用而开源

官方地址中文版:https://www.xuxueli.com/xxl-job/

XXL-JOB官方架构图

xxl-job可以类比elastic-job,它们都可用于分布式架构模式下,官方给出的参考说明较为丰富,这里小编不再就此展开说明,从开发者角度来说,接入xxl-job主要包括下面几个步骤:

  • 部署xxl-job的控制台
  • 在自己的产品或者实际项目中导入xxl-job核心依赖库
  • 编码自定义jobHandler
  • 控制台进行job的参数配置,并动态管理运行中的job

下面,就上面描述的几个步骤进行,把xxl-job的环境从搭建部署,到与springboot项目的整合,进行一个完整的说明

xxl-job管控台搭建与部署

1、git下载xxl-job源码

下载地址:https://github.com/xuxueli/xxl-job,可以根据自己的需要,下载指定的版本

2、idea工程中导入源码

源码主要包括3部分,admin模块是控制台的,即本文开头部分所阐述的,core包是核心包,包括一些调度的逻辑等,项目中整合xxl-job时,依赖的就是这个模块,实际应用中,可以结合自身需要进行源码的修改和发布,最后的samples模块是官方提供的样例demo

3、修改admin模块的配置文件并启动admin

首先将源码的doc目录下的sql文件运行一下,创建到数据库中,xxl-job运行过程中需要依赖数据库

然后修改amin模块下的配置文件,主要是连接数据库的配置,

修改完毕之后,启动admin,直接运行XxlJobAdminApplication即可,成功启动之后,浏览器访问:http://localhost:8080,初始化登录账户和密码为: root/123456

默认将进入到这个页面

后面管理job的动态配置,都是通过这个管控台操作的,默认情况下,源码中给我们配置了一个样例的执行器,

这个样例执行器在哪里呢?对应的就是样例模块下面的这个工程,

在这个工程中,有一个SampleXxlJob的类,对于xxl-job来说,使用方便的地方在于,如果我们想自定义一个任务并通过控制台进行操作的话,只需要一个被spring容器管理的类,然后在自定义的方法上面添加@XxlJob注解即可完成

启动xxl-job-executor-sample-springboot样例工程,可以不用做其他修改,直接启动,重点关注下样例工程配置文件这几处,想必大家一看就懂,

这时候刷新下控制台页面,可以发现在执行器一栏,这个样例工程中的执行器就处于在线状态,说明admin能够监控到这个执行器了

4、配置并启动样例工程的job,实现任务调度

接下来,只需要在当前这个执行器的操作栏那里,配置相应的参数即可完成对任务的调度,我们只需要来到这个参数配置页面,对即将调度的handler做简单的配置即可,主要包括:执行器名称,任务描述,以及cron表达式,相信大家都能看懂

配置完毕之后,点击启动即可

然后,我们去后台观察下控制台输出日志,可以发现,当我们点击启动之后,后台的任务就开始了,当然如果不需要执行了,还可以进行删除,或者重新编辑参数等

到这里,我们完成了xxl-job的控制台快速部署,以及通过控制台调度任务的案例初体验,接下来,我们来看下与springboot的整合

与springboot的整合

1、项目中导入核心依赖

注意版本对应起来

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

2、修改配置文件

可以参考样例工程中的配置,下面是核心的配置,其他的原有的配置保持不变

xxl:
  job:
    accessToken:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      appname: multi-thread
      address:
      ip:
      logpath: /data/applogs/xxl-job/jobhandler
      port: 9981
      logretentiondays: 30

3、新增一个xxl-job的配置管理类

仍然可以直接将样例工程中的XxlJobConfig拷贝过来直接使用

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(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;
    }

}

4、自定义job类

参考样例类中的SampleXxlJob,我们来自己写一个

@Component
@Slf4j
public class UserJob {

    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("testHandler")
    public ReturnT<String> testHandler(String param) throws Exception {
        XxlJobLogger.log("XXL-JOB, Hello World.");
        log.info("userJobHandler, Hello World");
        return ReturnT.SUCCESS;
    }

}

以上整合基本完毕,下面只需要去控制台做相关的参数配置即可,来到控制台,我们新增一个任务,并模仿上面的样例配置类,配置好基本的参数

5、启动项目并开启自定义任务调度

将自己的项目运行起来之后,来到控制台,发现监测到我们新的任务执行器了

点击启动,来到项目的控制台,可以发现任务已经被调度了

到此为止,我们就完成了与springboot的整合,需要说明的有如下几点:

  1. 如果需要结合自身的业务将增删改查的操作或者外部的springbean注入到自定义的handler类中;
  2. 另外,admin控制台的部署不限于idea中启动,也可以单独打成jar包,运行在linux环境或者其他的云服务器上,而真正的开发中就是这样做的
  3. 最后,实际开发中,为了确保安全,最好控制台的登录账户和密码做一下设置,不要使用默认的

本篇到此结束,最后感谢观看!

相关文章