XXL-Job的基本使用

一、市面上常见的任务调度产品

        针对分布式任务调度的需求,市场上出现了很多的产品:

         其中XXL-job 是我们经常使用的任务调度平台,XXL这三个英文字母.是以作者名许雪里命名的。

        可以前往 Gitee 地址进行下载使用

https://gitee.com/xuxueli0323/xxl-job.git

 

二、XXL-JOB的基本使用 

        在Gitee地址下载完XXL-job 的项目后,项目的结构如下:

2.1、启动xxl-job-admin服务

         首先启动xxl-job-admin,并在配置文件中修改对应的端口号以及虚拟路径,配置文件中部分默认的参数如下:

 

        xxl-job-admin服务是XXL-JOBweb页面端,所以启动完xxl-job-admin服务后,可以访问:

http://localhost:8080/xxl-job-admin/

账号:admin

密码:123456

         

2.2、登陆xxl-job的web页面

2.2.1、执行器管理

        执行器管理页面中有一个默认的执行器xxl-job-executor-sample,下面来介绍如何编辑执行器。

        AppName是执行器的唯一标示,所以不能重复

        名称可以自己随便写,但是最好见名知意,帮助我们快速的了解这个执行器的作用。

        注册方式是调度中心获取执行器地址的方式 ,一般选自动注册。

自动注册和手动录入的区别:

 

总结:           

 

2.2.2、任务管理 

        任务管理页面是用来编辑任务执行的,下面来介绍如何编辑任务管理。

执行器:每一个任务要对应一个执行器,所以要选择一个执行器,可供选择的执行器,就是在2.2.1中编辑好的执行器。

任务描述:此次任务的作用是什么。

负责人:这个任务的负责人是谁。

调度类型:CRON、无、固定速度

        CRON:是通过CRON表达式来控制任务调用的时间,这个在后面会做一个详细的介绍。

        无:不调用

        固定速度:以固定的时间进行调用,例如每隔5秒进行调用,这个通过CRON表达式也能实现,所以不推荐使用固定速度。

运行模式:运行模式主要分为BEANGLUEBEAN是通过java代码进行运行,GLUE是通过脚本的方式进行运行(有些银行的就是采用这种方式)

JobHander:运行模式采用BEAN,右边就会出现JobHander,JobHander中的值可以任意写,但是要和代码中的值保持一致,代码中通过@XxlJob注解和JobHander中的值相对应

路由策略:

        当执行器集群部署时,提供丰富的路由策略

阻塞处理策略:调度过于密集执行器来不及处理时的处理策略

 

2.3、启动xxl-job-executor-sample-springboot

 xxl-job-executor-sample-springboot 中配置文件里面需要注意的有:

        xxl.job.admin.addresses:对应2.1中web页面的IP地址、端口号、虚拟路径等

        xxl.job.executor.appname:对应2.2.1中执行器的AppName

        xxl.job.executor.port:对应执行器的端口号(和server.port中的端口号不一样)。

       

在 xxl-job-executor-sample-springboot中可以看见XxlJobConfig用来读取配置文件中的值

package com.xxl.job.executor.core.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author xuxueli 2017-04-28*/
@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;@Beanpublic 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();*/}

SampleXxlJob类中,用来执行任务。

@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {System.out.println("执行了第"+i+"次");//XxlJobHelper.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}// default success}
}

        SampleXxlJob中@XxlJob的值要和2.2.2任务管理中JobHander的值保持一致。再启动xxl-job-executor-sample-springboot服务。

        启动了xxl-job-executor-sample-springboot服务以及xxl-job-admin服务后,在任务管理页面点击执行一次,即可发起调用。

发现调用成功

 

三、 Corn表达式

        2.2.2中可以通过Corn表达式来控制任务调度的时间,以下是Corn表达式中符号的含义 

        以下面这个 Corn表达式为例

        

6-21:在时域,表示从早上6点到晚上9点执行。(“-”:指定一个范围,可以看上表)

0/5:在分域,表示每5分钟执行一次。(“/”:表示递增,可以看上表)

0:在秒域,表示第0秒执行。

连起来就是:早上6点到晚上9点这个时间段内,每隔5分钟执行一次。

例如:06:05:00、06:10:00、06:15:00、06:20:00、06:25:00,一直执行到晚上9点55分。

        另外:我后面在天域和月域中设置了通配符“*”,表示每月的每天执行。所以就是永远在执行,所以在年域和周域用“?”,“不指定”也不影响。

 

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

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

相关文章

使用`paddle.nn.Layer`自定义网络教程

文章目录 使用paddle.nn.Layer自定义网络教程1. 概念介绍2. 数据处理3. 搭建一个完整的深度学习网络4. 使用paddle.nn.Layer构建深度学习网络5. 利用paddle.nn.Layer进行子层的访问6. 修改paddle.nn.Layer层的成员变量7. 存储模型的参数8. 总结 使用paddle.nn.Layer自定义网络教…

LockBit病毒入侵揭秘:如何防范与应对

在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变&#xff0c;其中一款备受关注的勒索软件就是LockBit。本文将深入介绍LockBit的特征、攻击手段、演进历程以及对网络安全的威胁。 01 主要特征 LockBit是…

算法知识(java)随笔

1: 保留指定的小数为 printf("%.2f\n", ret) 和c语言类似 // 怎么保留小数 System.out.printf("%.2f\n", 1.0/3); 2: 在写小数二分的时候 加入让结果保留6位数 那么 while(r - l > 1e-8) 3: java Map里面之前写的代码: /*** 也就是 统计x在map里面的…

第二十一周周报

文献阅读&#xff1a;Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要&#xff1a;在本文中&#xff0c;作者提供了一个全面的 2d到3d视角来解决单目人体姿态估计的问题。首先&#xff0c;全面总结了人体的二维和三维表征。…

腾讯云Windows轻量应用服务器的默认密码是什么,以及如何重置?

首先&#xff0c;腾讯云轻量应用服务器的默认用户名是没有设置密码的&#xff0c;首次登录时需要重置密码。这意味着如果你的轻量应用服务器是腾讯云的&#xff0c;那么默认密码是不存在的&#xff0c;需要通过重置密码来获得一个新的密码。 关于如何重置密码&#xff0c;有几…

chatgpt新版本api的调用

chatgpt新版本api的调用 原始版本调用api方式&#xff1a;新版调用chatgpt-api的方式&#xff1a; 原始版本调用api方式&#xff1a; import openaiopenai.api_key "{上面复制的key}"completion openai.ChatCompletion.create(model"gpt-3.5-turbo",mes…

Spring El表达式官方文档学习

文章目录 推荐一、概述1、什么是SpEL2、SpEL能做什么 二、SpEL表达式使用1、文字表达式2、属性, 数组, List, Map,和 索引&#xff08;1&#xff09;属性操作&#xff08;2&#xff09;数组和List&#xff08;3&#xff09;Map 3、内嵌List4、内嵌Map5、构建数组6、调用类的方法…

Windows的Linux化持续推进中

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java基础 - 6 - 面向对象(二)

Java基础 - 6 - 面向对象&#xff08;一&#xff09;-CSDN博客 二. 面向对象高级 2.1 static static叫做静态&#xff0c;可以修饰成员变量、成员方法 2.1.1 static修饰成员变量 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a;类变量、实例变量&#xff08;对象…

JavaScript 语句语法的教程

JavaScript 是一种广泛应用于网页开发的脚本语言&#xff0c;熟练掌握 JavaScript 的语法是成为一名优秀的前端开发工程师的必备技能之一。本教程将详细介绍 JavaScript 中的语句语法&#xff0c;帮助初学者快速入门并加深对 JavaScript 语法的理解。 一、注释 在 JavaScript…

常见的爬虫逆向面试题

文章转载于&#xff1a;https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有兴趣去源站浏览学习 主要自己看着方便些 1.HTTS三次握手 目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的&#xff0c;因此也需要三次握手。在 TCP 三次握手建立链接之后&#xff0c;才会进行 …

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

【大数据Hive】hive 多字段分隔符使用详解

目录 一、前言 二、hive默认分隔符规则以及限制 2.1 正常示例&#xff1a;单字节分隔符数据加载示例 2.2 特殊格式的文本数据&#xff0c;分隔符为特殊字符 2.2.1 文本数据的字段中包含了分隔符 三、突破默认限制规则约束 3.1 数据加载不匹配情况 1 3.2 数据加载不匹配…

python paramiko 网络系统运维

概述 背景&#xff1a;网络系统运维与建设&#xff1a;工作中发现客户使用python脚本批量操作网络设备导出多台网络设备的配置定期执行相关的巡检工作 修改配置 # -*- coding:utf8 -*- """ # editor: hjjdreamer # create-time: 2024/3/3-23:31 # Python-Scri…

Java项目推荐|几个B站上的从零搭建项目

分享几个B站上搜集到的技术比较全&#xff0c;讲解也详细的Java后端开发项目 目录 谷粒商城 2020-03-31 iHRM 人力资源管理系统 2021-04-16 瑞吉外卖 2022-04-12 学成在线 2023-01-13 尚上优选 2023-06-06 黑马头条 2023-06-13 苍穹外卖 2023-07-05 谷粒商城 2020-03-3…

命名实体识别NER

一、什么是命名实体识别&#xff1a; 命名实体&#xff1a;通常我们将人名、地名、机构名等专有名词统称命名实体&#xff0c;如&#xff1a;周杰伦&#xff0c;黑山县&#xff0c;孔子学院&#xff0c;24方钢直机 顾名思议&#xff0c;命名实体识别&#xff08;简称NER&#x…

【常用的 Git 命令及简要示例说明】

常用的 Git 命令及简要示例说明&#xff0c;以供参考&#xff1a; 初始化一个新的代码仓库&#xff1a; git init克隆一个远程仓库到本地&#xff1a; git clone https://github.com/user/repo.git添加当前所有变更到暂存区&#xff1a; git add .提交暂存区的变更到本地仓库&a…

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一&#xff09;任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify&#xff08;&#xff09;发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR&#xff08;&#xff09;发送通知函数ISR版本3、x…

Java面试题总结200道(二)

26、简述Spring中Bean的生命周期&#xff1f; 在原生的java环境中&#xff0c;一个新的对象的产生是我们用new()的方式产生出来的。在Spring的IOC容器中&#xff0c;将这一部分的工作帮我们完成了(Bean对象的管理)。既然是对象&#xff0c;就存在生命周期&#xff0c;也就是作用…

LeetCode 刷题 [C++] 第73题.矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目分析 题目中要求使用原地算法&#xff1a;即直接在输入矩阵上进行修改。因此如果在输入矩阵上把行/列的值修改成0后&#xff0c;在…