Docker-Compose部署并使用xxl-job(springboot版)

文章目录

  • 前言
  • 一、docker-compose 部署xxl-job
  • 二、springboot项目中使用xxl
    • 1.pom文件导包
    • 2.添加配置文件
    • 3添加java配置文件
    • 3.添加任务
  • 三、在xxl-job平台配置任务
    • 1.新增执行器
    • 1.新增任务
  • 总结


前言

在本文中,我们将探讨如何:

  • 使用Docker-Compose创建一个包含xxl-job和其所需依赖的Docker容器集群,使得部署变得轻松而可伸缩。
  • 配置xxl-job以适应你的应用需求,包括任务的调度和执行。
  • 创建和管理任务,以及监控任务的执行情况。
  • 通过示例演示如何使用Docker-Compose和xxl-job来调度和管理任务,以便你可以将这一强大的组合应用于自己的项目中。

无论是对Docker、Spring Boot还是xxl-job不熟悉的读者,本文都将提供清晰的指导,帮助你一步步实现任务调度和管理的自动化,从而提高应用的可维护性和效率。让我们开始吧!

一、docker-compose 部署xxl-job

创建docker-compose文件

version: "3"
services:
  xxl-job-admin:
    restart: always
    # docker 镜像
    image: xuxueli/xxl-job-admin:2.4.0
    # 容器名称
    container_name: xxl-job-admin
    volumes:
      # 日志目录映射到主机目录
      - ./data/logs:/data/applogs
    ports:
      # 端口映射
      - "8800:8800"
    environment:
      # 设置启动参数
      PARAMS: '
      --server.port=8800
      --server.servlet.context-path=/xxl-job-admin
      --spring.datasource.url=jdbc:mysql://ip:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
      --spring.datasource.username=xxl-job
      --spring.datasource.password=yKnam2mYb82Dpf6N
      --spring.mail.username=xxxx.com
      --spring.mail.password=xxxx
      --xxl.job.accessToken=onelovehzs888'  #代码里面需要指定的token

此处数据库可自行创建可参考官网xxl官网

在compose文件中修改数据库配置即可
–spring.mail.username=1958615756@qq.com
–spring.mail.password=Lsl18718383742
此处使xxl登录密码,可自行修改配置
运行compse文件看访问 http://你的服务器ip:8800/xxl-job-admin/
注意需要开发8800端口

登录可看到这个页面在这里插入图片描述

二、springboot项目中使用xxl

1.pom文件导包

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

2.添加配置文件

代码如下(示例):

xxl:
  job:
    accessToken: onelovehzs888
    admin:
      addresses: http://你的服务器ip:8800/xxl-job-admin
    executor:
      appname: xxl-job-executor-freelancer
      address: http://你的服务器ip:8800/xxl-job-admin
      ip: 你的服务器ip
      port: 8800
      logpath: ./xxl-job/executor
      logretentiondays: 7

accessToken需要和compose文件的配置一样
appname为执行器名字,下面会配置


3添加java配置文件

@Configuration
public class XxlJobConfig {
    private final 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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "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();
     */


}

3.添加任务

@Slf4j
@Component
public class TimedTaskJobHandler {

    @Autowired(required = false)
    private List<EveryMinuteExecute> everyMinuteExecutes;


    @Autowired(required = false)
    private List<EveryHourExecute> everyHourExecutes;


    @Autowired(required = false)
    private List<EveryDayExecute> everyDayExecutes;
    /**
     * 每分钟任务
     *
     * @throws Exception
     */
    @XxlJob("everyMinuteExecute")
    public ReturnT<String> everyMinuteExecute(String param)  {
        log.info("每分钟任务执行");
        if (everyMinuteExecutes == null || everyMinuteExecutes.size() == 0) {
            return ReturnT.SUCCESS;
        }
        for (int i = 0; i < everyMinuteExecutes.size(); i++) {
            try {
                everyMinuteExecutes.get(i).execute();
            } catch (Exception e) {
                log.error("每分钟任务异常", e);
            }
        }
        return ReturnT.SUCCESS;
    }

    /**
     * 每小时任务
     *
     * @throws Exception
     */
    @XxlJob("everyHourExecuteJobHandler")
    public ReturnT<String> everyHourExecuteJobHandler(String param) {
        log.info("每小时任务执行");
        if (everyHourExecutes == null || everyHourExecutes.size() == 0) {
            return ReturnT.SUCCESS;
        }

        for (int i = 0; i < everyHourExecutes.size(); i++) {
            try {
                everyHourExecutes.get(i).execute();
            } catch (Exception e) {
                log.error("每小时任务异常", e);
            }
        }
        return ReturnT.SUCCESS;
    }

    /**
     * 每日任务
     *
     * @throws Exception
     */
    @XxlJob("everyDayExecuteJobHandler")
    public ReturnT<String> everyDayExecuteJobHandler(String param) {

        log.info("每日任务执行");
        if (everyDayExecutes == null || everyDayExecutes.size() == 0) {
            return ReturnT.SUCCESS;
        }

        for (int i = 0; i < everyDayExecutes.size(); i++) {
            try {
                everyDayExecutes.get(i).execute();
            } catch (Exception e) {
                log.error("每日任务异常", e);
            }
        }
        return ReturnT.SUCCESS;
    }


}

此处推荐使用接口的形式,通过继承同类型接口实现任务的制定。

三、在xxl-job平台配置任务

1.新增执行器

在此处新增执行器,与springboot代码appname名称相同,选择自动注册即可;
在这里插入图片描述

1.新增任务

此处需要填写任务的cron表达式,不懂的可以网上工具直接生成;
jabHandler填写代码中注解@XxlJob对应的内容
然后点击操作运行即可
在这里插入图片描述
在这里插入图片描述

总结

完成了Docker-Compose部署并使用xxl-job(Spring Boot版)的整个过程后,你现在已经掌握了一个强大的工具组合,可以轻松管理和调度任务。这一解决方案不仅简化了任务的部署和管理,还提供了可扩展性和灵活性,使你能够更好地应对不断变化的应用需求。

现在,你可以将这些知识和技能应用于你自己的项目中,无论是构建数据处理管道、定时报表生成还是任何其他需要任务调度的应用场景。希望本文对你有所帮助,让你更好地理解和利用Docker-Compose和xxl-job来简化任务管理和提高生产力。

如果你有任何问题、反馈或需要进一步的帮助,都请随时联系我们。感谢你的阅读,祝愿你在任务调度和管理领域取得成功!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lsllsl后端学者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值