xxljob

news2024/11/26 22:28:30

分为调度中心 + 执行器
调度中心:提供可视化界面,配置定时任务,定时去调用执行器
调度中心执行器管理:每个springboot作为执行器, 也就是执行器的标识
在这里插入图片描述

任务管理:选中执行器,创建改该执行器下的任务
在这里插入图片描述
分片广播:集群情况,并行处理任务
场景:大数据表并行处理任务,分散服务器压力
!!现在一张数据表里有大量数据需要某个服务端应用来处理,要求:
2能够并行处理;
3能够较灵活地控制并行任务数量。
4压力较均衡地分散到不同的服务器节点;
因为需要并行处理同一张数据表里的数据,所以比较自然地想到了分片查询数据,可以利用对 id 取模的方法进行分片,避免同一条数据被重复处理。
根据第 1、2 点要求,本来想通过对线程池的动态配置来实现,但结合第 3 点来考虑,服务器节点数量有可能会变化,节点之间相互无感知无通信,自己在应用内实现一套调度机制可能会很复杂。
如果有现成的独立于这些服务器节点之外的调度器就好了——顺着这个思路,就想到了已经接入的分布式任务调度平台 XXL-JOB,而在阅读其 官方文档 后发现「分片广播 & 动态分片」很贴合这种场景。
/**
* 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);
}
}
}

防止重复执行: 路由策略选择一致性hash,只会固定走1台机器

任务调度中心,去官网clone,跑起来即可


springboot整合 执行器
pom


    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- xxl-job-core -->
        <!--定时器xxljob-->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
        </dependency>
    </dependencies>







yml



#执行器配置
xxl:
  job:
    accessToken: default_token #token
    admin:
      # xxl-job后台管理界面的地址  调度中心地址
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      # 此执行器的名称
      appname: exectorNameHaHa
      #执行器地址 http://本机ip:port/
      address: http://127.0.0.1:9997/
      # 此执行器的ip 执行器IP默认为空,表示自动获取IP 多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。
      ip: 127.0.0.1
      # 此执行器的端口
      port: 9997
      # 此执行器的日志存放路径
      logpath: /data/applogs/xxl-job/jobhandler
      # 此执行器的日志保存时间
      logretentiondays: 7
server:
  port: 8082
配置文件

@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.setAddress(address);
        xxlJobSpringExecutor.setAppname(appname);
        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();
     */


}

执行定时业务逻辑


@Component
public class JobToPrint extends IJobHandler {

    @Override
    @XxlJob("JobToPrint")
    public ReturnT<String> execute(String param) throws Exception {
        try {
            System.out.println("测试job");
            return SUCCESS;
        } catch (Exception e){
            e.printStackTrace();
            return FAIL;
        }
    }
}

在这里插入图片描述

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

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

相关文章

深度学习与总结JVM专辑(六):JVM字节码执行引擎

JVM字节码执行引擎前言运行时栈帧结构方法调用解析虚方法和非虚方法分派静态分派静态类型和实际类型动态分派字段没有多态性单分派和多分派JVM动态分派的实现前言 执行引擎是JVM核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执…

vue中含有iframe的页面如何避免路由切换时keep-alive不起作用

路由组件中使用keep-alive 其他组件会正常缓存 但是含有iframe的页面无法正常缓存&#xff0c;这个问题困扰了我很久&#xff0c;也成为了项目目前的一个瓶颈。突然有一天&#xff0c;我们的技术总监推荐给我一篇博文&#xff0c;真的是让我醍醐灌顶&#xff0c;虽然这个keep-a…

详解设计模式:外观模式

外观模式&#xff08;Facade Pattern&#xff09;&#xff0c;又称为门面模式&#xff0c;是 GoF 的 23 种设计模式中的一种结构型设计模式。 外观模式 是指提供一个统一的接口去访问多个子系统的多个不同的接口&#xff0c;它为子系统中的一组接口提供一个统一的高层接口。使得…

jeecgboot — docker 搭建 jeecgboot 项目 +本地VUE2 前端

后端&#xff1a; Docker镜像单体启动项目 1. 下载项目 git clone https://gitee.com/jeecg/jeecg-boot.git2. 本地配置host # jeecgboot 127.0.0.1 jeecg-boot-mysql 127.0.0.1 jeecg-boot-redis 127.0.0.1 jeecg-boot-system注意&#xff1a; 如果本地安装了mysql和…

基于PHP+MySQL超市库存管理系统的设计与实现

随着经济的高速发展,超市的信息化工作也在如火如荼地进行,由于超市规模的不断扩大以及商务往来的日益增多,超市对进销存信息的掌握和使用就越来越多,因此以前的原始的手工操作方式就不能适应超市快速发展的需要,在计算机科学技术日益发展和成熟的今天,运用其先进的技术性来管理…

Qt 自定义主题颜色,颜色选择器

灵感及素材来源&#xff1a; 暗玉紫 - 中国色 - 中国传统颜色 (zhongguose.com)http://zhongguose.com/#anyuzi实现效果 中国色 2022-11-29 15-37-121、支持读取颜色配置文件 2、支持动态添加自定义颜色 3、可自由调节颜色RGB值 4、三个圆形按钮显示和调整RGB&#xff0c;四…

nuxtjs中asyncData异步数据请求、代理配置、fetch网络请求、vuex的使用、中间件处理

文章目录1. asyncData异步数据请求2. 代理配置3. fetch网络请求4. vuex4.1 state中的数据展示4.2 同步方法与异步方法4.3 数据持久化处理5. 中间件处理1. asyncData异步数据请求 Nuxt.js 扩展了 Vue.js&#xff0c;增加了一个叫 asyncData 和 fetch 的方法&#xff0c;使得我们…

天宇优配|突然爆雷!大跌15%!

大家好&#xff0c;来一起重视上午的市场行情及最新资讯~ 11月30日上午&#xff0c;上证指数低开0.27%&#xff0c;深证成指跌0.16%&#xff0c;创业板指跌0.16%。盘面上&#xff0c;地产股持续发力&#xff0c;大消费、金融、航运等板块回调。 港股方面&#xff0c;恒指低开0…

命令模式

文章目录思考命令模式1.命令模式的本质2.何时选用命令模式3.优缺点4.实现耦合写法命令模式写法命令模式撤销思考命令模式 命令模式就是解耦强耦合代码&#xff0c;用户只关心功能的实现&#xff0c;开发者却可以利用命令模式在这之间加一些小动作&#xff0c;比如&#xff1a;撤…

天翎知识文档系统+群晖NAS,助力企业实现移动化学习

编者按&#xff1a;移动化学习成为一种社会发展趋势&#xff0c;本文分析了企业移动化学习的意义&#xff0c;并提出了企业移动化学习的一款全新解决方案——天翎知识文档系统群晖NAS。 关键词&#xff1a;多端适配&#xff0c;学习培训&#xff0c;智能问答&#xff0c;在线预…

Javascript脚本运算符执行顺序对照表

Javascript脚本运算符执行顺序对照表&#xff1a;在线查看Javascript脚本运算符执行优先级别 窍门&#xff1a; CtrlF 快速查找 Javascript脚本运算符优先级&#xff0c;是描述在计算机计算表达式时执行运算的先后顺序。Javascript脚本运算符优先级表&#xff0c;同一行中的运算…

巴西队提前出线,预定大力神杯?数据分析告诉你,到底谁才是冠军

2022年卡塔尔世界杯的第一轮小组赛&#xff0c;已经在众多惊诧、悲伤、惊喜的情绪中结束&#xff0c;而仅仅是第一轮的小组比赛&#xff0c;不断爆出的冷门就足以使人大跌眼镜了&#xff1a; 连续34场世界大赛不败的潘帕斯雄鹰——阿根廷&#xff0c;1-2负于世界排名51的沙特&…

天宇优配|百股涨停再现,沪指盘中创近两个月新高

周二A股商场呈现普涨格局&#xff0c;上证指数上涨2.31%&#xff0c;盘中最高点位创出最近两个月新高。各大职业板块近乎全线上涨&#xff0c;地产板块个股掀起涨停潮&#xff0c;数十只地产债盘中涨光临停。此外&#xff0c;A股大金融体现强势&#xff0c;疫苗股则尾盘忽然暴力…

号称Java圣经,Github上爆火的1058页JVM全栈小册到底有什么魅力

对于JVM&#xff0c;我想大部分小伙伴都是要面试了才会去学&#xff0c;其余时间基本不会去看&#xff08;掐指一算&#xff0c;你们书架上面的深入理解Java虚拟机第三版应该都一层灰了吧【手动狗头】&#xff09;。但值得一说的是&#xff0c;当你工作多年之后&#xff0c;你遇…

基于LSCF和LSFD算法在频域中识别快速实现的MIMO研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

TensorFlow Lite 是什么?用 TensorFlow Lite 来转换模型(附代码)

文章目录TensorFlow Lite 做了什么&#xff1f;将一个模型用 TensorFlow Lite 转换训练一个简易模型保存模型转换模型加载 TFLite 模型并分配张量进行预测将在猫狗大战数据集上进行迁移学习的 MobileNetV2 转换到 TensorFlow Lite将模型转换到 TensorFlow Lite优化模型Referenc…

DFL3:软件版本的选择和安装详解

这本是一个简单的问题&#xff0c;但是对于新手而言&#xff0c;所有问题&#xff0c;总是说的越清楚越仔细越好。我之所以这么说&#xff0c;肯定是有人问了。所以我就专门开一篇文章来说一说&#xff0c;软件版本的异同&#xff0c;以及如何选择。针对不同的语言&#xff0c;…

如何快速定位到报错日志中的关键信息,一招学会,赶快GET吧

一般的服务器日志一个可能大的有几十上百m&#xff0c;小的也得几百k&#xff0c;里面内容是比较多的&#xff0c;如拿到日志没思路去看的话&#xff0c;下面一些办法可以让你快速定位到日志中的异常错误信息 文章目录步骤1:定位到错误信息再那个日志中(grep)步骤2:查看日志上下…

[附源码]计算机毕业设计springboot教育企业网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

鲲鹏devkit性能分析工具介绍(三)

鲲鹏devkit性能分析工具介绍&#xff08;三&#xff09; 本篇主要讲解鲲鹏devkit性能分析工具的访存分析功能 访存分析 访存统计分析基于CPU访问缓存和内存的PMU事件&#xff0c;分析存储的访问次数、命中率、带宽等情况。 Miss事件分析基于ARM SPE&#xff08;Statistical…