SpringBoot集成xxl-job分布式定时任务

news2025/1/16 18:46:44

一、xxl-job定时任务搭建

下面这篇文章介绍了xxl-job平台搭建过程https://blog.csdn.net/xrq1995/article/details/126282290

二、spring boot项目搭建

1.创建项目

2.pom文件引入

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

3. yaml配置文件引入

xxl:
  job:
    admin:
      ### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
      addresses: http://127.0.0.1:8080/xxl-job-admin
      ### 执行器通讯TOKEN [选填]:非空时启用
    accessToken: default_token
    executor:
      ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: test-xxl-job-executor
      ### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      ip:
      ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 8889
      ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: logs/xxl-job/jobhandler
      ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能
      logretentiondays: 30

4. xxl-job配置类

@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;
    }

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

}

5. 定时任务执行类

/**
 * XxlJob开发示例(Bean模式)
 *
 * 开发步骤:
 *      1、任务开发:在Spring Bean实例中,开发Job方法;
 *      2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
 *      3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
 *      4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
 *
 * @author xuxueli 2019-12-11 21:52:51
 */
@Slf4j
@Component
public class SampleXxlJob {
    private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);


    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        log.info("SampleXxlJob简单任务示例");
        XxlJobHelper.log("XXL-JOB, Hello World.");

//        for (int i = 0; i < 5; i++) {
//            XxlJobHelper.log("beat at:" + i);
//            TimeUnit.SECONDS.sleep(2);
//        }
        // default success
    }


    /**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        // 业务逻辑
        for (int i = 0; i < shardTotal; i++) {
            if (i == shardIndex) {
                XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobHelper.log("第 {} 片, 忽略", i);
            }
        }

    }


    /**
     * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;
     */
    @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
    public void demoJobHandler2() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }


}

三、xxl-job-admin后台配置

admin后台地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)

默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

进入执行器管理页面新增执行器,AppnName填写yaml文件中配置的test-xxl-job-executor

然后进入任务管理创建新的定时任务,如下图所示:运行模式选择bean模式,jobHandler输入定时任务执行类中的demoJobHandler

创建成功后可以在操作中对定时任务进行启停等管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【文档】利用readthedoc来写一个在线文档

使用readthedoc快速创建在线文档 分为两步走 本地创建文档部署到网络 本地创建文档 先安装sphinx pip install sphinx然后在你的文件夹内 sphinx-quickstart一系列默认回车即可 最后编译 make html会产生_build文件夹之类的。 用浏览器打开_build/html/index.html 以…

详细流程——安装并启动Jupyter notebook

安装并启动使用Jupyter notebook一、安装*step1:*切换路径*step2:*下载*step3:*启动Juypter Notebook*step4:*配置Jupyter Notebook*step5(可不配置):* 添加代码自动补全功能二、启动三、初步使用一、安装 注意&#xff1a;我是没有安装Anaconda&#xff0c;中途觉得需要Jupyt…

LeetCode:16. 最接近的三数之和

16. 最接近的三数之和1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组…

全网最全ssh:远程连接服务器学习,教你十分钟学会

远程连接服务器简介 SSH是如何工作的&#xff1f; 认证阶段 ssh修改配置文件 配置文件注释 练习 试验1 实验2 测试 远程连接服务器简介 1、什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可…

JSP学习笔记一

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

shell第七天作业——awk(上)

题目 1、获取根分区剩余大小 2、获取当前机器ip地址 3、统计出apache的/var/log/httpd/access_log文件中访问量最多的前3个IP 4、打印/etc/passwd中UID大于500的用户名和uid 5、/etc/passwd 中匹配包含root或sys或tcp的任意行 6、请打印出/etc/passwd 第一个域&#xff0…

STM32MP157驱动开发——Regmap API

STM32MP157驱动开发——Regmap API0.前言一、Regmap API 简介1.Regmap 驱动框架2.regmap 结构体3.regmap_config 结构体4.Regmap 操作函数①Regmap 申请与初始化②Regmap释放③regmap 设备访问 API 函数5. regmap_config 掩码设置二、驱动开发1.修改设备结构体&#xff0c;添加…

RxJava VS kotlin flow

1.基础概念介绍 1.1 观察者模式 观察者模式&#xff0c;其实对于Android开发者而言&#xff0c;并不陌生&#xff0c;button的setOnClickListener&#xff0c;就是一个典型的观察者模式。控件button是被观察者&#xff0c;它产生一个事件(点击)&#xff0c;观察者OnClickList…

量化策略——准备2 量化技能树量化术语

文章目录量化技能树量化/金融术语1. 俗语2. 持仓术语3. 资金术语4. 策略术语5. 股票软件界面实用术语量化必然用到的核心价格数据其他数据/指标含义6. 委托单术语量化技能树 首先&#xff0c;量化金融&#xff08;Quantitative Finance&#xff0c;简称“量化”&#xff0c;Qu…

《小猫猫大课堂》三轮1——深度解析数据在内存中的存储

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重…

学习网络协议

概述 先从知乎盗个图&#xff1a;怎么开始学习网络协议&#xff1f; - 知乎 1、应用层 作用&#xff1a;定义数据格式并按照对应的格式解读数据。 2、传输层 作用&#xff1a;定义端口&#xff0c;标识应用程序身份&#xff0c;实现端口到端口的通信。 3、网络层 作用&…

5个技巧提高项目领导技能

作为项目经理&#xff0c;一个典型的工作日涉及处理许多任务。监督不同的时间表和里程碑。解决问题&#xff0c;主动解决瓶颈。 这些后勤工作很重要&#xff0c;但您也知道成功的项目管理比协调这些细节要多得多。为了做好你的工作&#xff08;并且把它做好&#xff09;&am…

C语言模拟QT的信号与槽功能

文章目录前言一、Qt信号与槽的实现机理二、简化后的实现步骤1. 定义一些必要的宏2. 实现声明信号的宏3. 实现发射信号的宏4. 取代QObject类5. 实现connect函数6. 可有可无的slots三、完整的代码实现四、使用方法与QT中的区别1. SIG_SLOT_OBJ取代QObject2. 定义信号不同3. 发射信…

【NI Multisim 14.0原理图环境设置——原理图的组成】

目录 序言 一、原理图的组成 &#x1f46c; 1. 元器件 &#x1f46c;2. 仪表 &#x1f46c;3.导线 &#x1f46c;4.丝印层 &#x1f46c;5. 端口 &#x1f46c;6.网络标号 &#x1f46c;7.电源符号 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设…

为iframe正名,你可能并不需要微前端

作者&#xff1a;刘显安(码怪) 任何新技术、新产品都是有一定适用场景的&#xff0c;它可能在当下很流行&#xff0c;但它不一定在任何时候都是最优解。 前言 最近几年微前端很火&#xff0c;火到有时候项目里面用到了iframe还要偷偷摸摸地藏起来生怕被别人知道了&#xff0c;…

Linux学习笔记——Tomcat安装部署

5.2、Tomcat安装部署 5.2.1、简介 Tomcat是由Apache开发的一个Servlet容器&#xff0c;实现了对Servlet和JSP的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#xff0c;Tomcat是一个WEB应用…

内核解读之内存管理(3)内存管理三级架构之内存区域zone

文章目录1、zone类型2、zone结构体3、zone的初始化流程1、zone类型 NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度要快, 而Linux为了兼容NUMA结构, 把物理内存…

Flink数据流类型之间的转换(WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换)

Flink提供了一些流API&#xff0c;其中包括WindowedStream、DataStream、KeyedStream和AllWindowStream。 &#x1f34a;WindowedStream是一种特殊的流&#xff0c;其中数据已按时间或数据元素的键进行分组&#xff0c;并且每个分组的数据都在窗口中按时间划分。这意味着&…

2023年出入境政策-喜忧参半

2023年已经到来&#xff0c;随着卫健委公布中国防控新冠措施调整优化以后&#xff0c;出入境政策相应也有了很大变化&#xff0c;知识人网小编概括为喜忧参半。喜的是从国外入境中国不再需要集中隔离&#xff1b;忧的是有些国家对于中国人入境增加了核酸检测要求。下面我们就这…

第一章 Java入门开发

第一章 Java入门开发 目录一&#xff0e; 概述二&#xff0e; JDK1. 概述2. 安装3. JDK目录一&#xff0e; 概述 Java是一门高级程序设计语言&#xff0c;是支持跨平台和完成面向对象的程序设计语言。针对不同的开发市场&#xff0c;sun公司将Java分为Java SE&#xff08;标准版…