项目中如何整合xxl-job分布式定时任务

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

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

下载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管理执行器;

在这里插入图片描述
我就直接选择springboot的执行器了

导入脚本

将doc目录下的脚本打到数据库中
在这里插入图片描述

修改数据库账号密码

在这里插入图片描述

添加定时任务业务类

在这里插入图片描述

执行器名称要对应

在这里插入图片描述
在执行器管理里面添加对应的执行器管理
在这里插入图片描述
机器地址可以不用写,会自动注册。
在这里插入图片描述
如果没有执行器则要新增执行器
在这里插入图片描述

添加定时任务

新增定时任务
在这里插入图片描述
在这里插入图片描述
执行一下,发现可以成功了。
在这里插入图片描述
在这里插入图片描述
OK,这样就完成了简单的启动。

项目中整合

官方的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的公共模块,创建一个配置类:
在这里插入图片描述

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();
     */


}

在这里插入图片描述
在该模块中引入依赖:

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

然后我们可以在自己的模块中引入xxl-job模块
在这里插入图片描述
创建一个task类就行了,引入@Xxl-job,配置一个Handler,在后台添加一下就好了。
在这里插入图片描述
nacos配置:

# xxl-job
logging:
  config: classpath:logback.xml
xxl:
  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这个模块就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java后端指南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值