前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xxl-job分布式定时任务

xxl-job分布式定时任务

作者头像
java后端指南
发布2021-11-11 10:12:51
3880
发布2021-11-11 10:12:51
举报
文章被收录于专栏:java后端java后端

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

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

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

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

1下载xxl-job

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

代码语言:javascript
复制
git clone https://github.com/xuxueli/xxl-job.git

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

代码语言:javascript
复制
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的执行器了

2导入脚本

将doc目录下的脚本打到数据库中

3修改数据库账号密码

在这里插入图片描述

4添加定时任务业务类

在这里插入图片描述

5执行器名称要对应

在执行器管理里面添加对应的执行器管理

机器地址可以不用写,会自动注册。

如果没有执行器则要新增执行器

6添加定时任务

新增定时任务

执行一下,发现可以成功了。

OK,这样就完成了简单的启动。

7项目中整合

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

代码语言:javascript
复制
  <!--xxj-job核心依赖-->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.0</version>
        </dependency>

其实我就可以创建一个xxl-job的公共模块,创建一个配置类:

代码语言:javascript
复制
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();
     */


}

在该模块中引入依赖:

代码语言:javascript
复制
 <!--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配置:

代码语言:javascript
复制
# 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这个模块就行了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java后端指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日主题:xxl-job分布式定时任务
    • 1下载xxl-job
      • 2导入脚本
        • 3修改数据库账号密码
          • 4添加定时任务业务类
            • 5执行器名称要对应
              • 6添加定时任务
                • 7项目中整合
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档