Part2今日主题:xxl-job分布式定时任务

参考:​csdn.net/huangjinjin520/article/details/106880276/">​https://blog.csdn.net/huangjinjin520/article/details/106880276/​

XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。一般微服务都用这个框架的定时任务吧。

刚好公司新项目中用到了这个东西,然后这个分布式定时任务的技术选择也交给了我,包括将该技术整合到项目中,今天就来记录一下这个如何整合的吧。

1下载xxl-job

首先我们要将项目下载下来

git clone https://github.com/xuxueli/xxl-job.git

下载下来之后有这几个模块,直接启动admin模块就可以进入后台了

xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用,推荐这种方式;xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;

xxl-job分布式定时任务_spring我就直接选择springboot的执行器了

2导入脚本

将doc目录下的脚本打到数据库中xxl-job分布式定时任务_spring_02

3修改数据库账号密码

xxl-job分布式定时任务_定时任务_03在这里插入图片描述

4添加定时任务业务类

xxl-job分布式定时任务_定时任务_04在这里插入图片描述

5执行器名称要对应

xxl-job分布式定时任务_微服务_05在执行器管理里面添加对应的执行器管理xxl-job分布式定时任务_微服务_06机器地址可以不用写,会自动注册。xxl-job分布式定时任务_spring_07如果没有执行器则要新增执行器xxl-job分布式定时任务_定时任务_08

6添加定时任务

新增定时任务xxl-job分布式定时任务_定时任务_09xxl-job分布式定时任务_微服务_10执行一下,发现可以成功了。xxl-job分布式定时任务_微服务_11xxl-job分布式定时任务_微服务_12OK,这样就完成了简单的启动。

7项目中整合

官方的​​xxl-job-executor-sample-jboot​​其实就是我们微服务中的一个模块,因此我们可以在我们自己项目引入依赖:

<!--xxj-job核心依赖-->        <dependency>            <groupId>com.xuxueli</groupId>            <artifactId>xxl-job-core</artifactId>            <version>2.3.0</version>        </dependency>

其实我就可以创建一个xxl-job的公共模块,创建一个配置类:xxl-job分布式定时任务_spring_13

public class XxlJobConfig {    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.addresses}") private String adminAddresses;
@Value("${xxl.job.accessToken}") private String accessToken;
@Value("${xxl.job.appname}") private String appname;
@Value("${xxl.job.address}") private String address;
@Value("${xxl.job.ip}") private String ip;
@Value("${xxl.job.port}") private int port;
@Value("${xxl.job.logpath}") private String logPath;
@Value("${xxl.job.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); //在項目端口的基础上向右偏移1000端口,这样可以兼容所有模块的项目 xxlJobSpringExecutor.setPort(port+1000); 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(); */

}

xxl-job分布式定时任务_spring_14在该模块中引入依赖:

<!--xxj-job核心依赖-->        <dependency>            <groupId>com.xuxueli</groupId>            <artifactId>xxl-job-core</artifactId>            <version>2.3.0</version>        </dependency>

然后我们可以在自己的模块中引入xxl-job模块xxl-job分布式定时任务_定时任务_15创建一个task类就行了,引入@Xxl-job,配置一个Handler,在后台添加一下就好了。xxl-job分布式定时任务_spring_16nacos配置:

# xxl-joblogging:  config: classpath:logback.xmlxxl:  job:      accessToken: ""      addresses: http://127.0.0.1:9207/xxl-job-admin      address: ""      appname: ${spring.application.name}      ip: ""      logpath: /data/applogs/xxl-job/jobhandler      logretentiondays: 30      port: ${server.port}

也就是在xxl-job官网文档上,我们只需要admin这个模块就行了。


欢迎关注:java后端指南

xxl-job分布式定时任务_微服务_17