【含完整代码】Java定时任务之xxl-job[超详细]

前言

个人博客:www.wdcdbd.com

 在Java中使用定时任务是一件很常见的事情,比如使用定时任务在什么时间什么时候,去发布一些信息,或者去查询一些日志等相关的代码。这时,我们就要开发定时任务这中功能来实现此案例。而Java常见的定时任务一般有6种,JDK自带Timer实现,Quartz框架集成实现spring自带的Spring Task等  剩下的就不说了,具体想要了解可以去百度搜索,而今天要讲的是Java定时任务神器: xxl-Job——轻量级分布式任务调度平台。

XXl-Job 

 开源xxl-job: https://gitee.com/xuxueli0323/xxl-job

XXL-JOB是一个轻量级分布式任务调度平台。特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展。由调度中心和执行器功能完成定时任务的执行。调度中心负责统一调度,执行器负责接收调度并执行。

因为此文章是针对小白来讲述的,所以会使用大量的图片和代码,以便讲的更加详细易懂,所以会有很多小废话。话不多说,直接上代码讲解。

一、Gitee下载开源框架XXl-job

1、拉取xxl-job代码

首先去上述的gitee拉取开源的xxl-job代码,千万不要选择master分支,要选择稳定的版本,这里我选择2.2.0来做演示。

去自己的idea中拉取gitee

 拉取好之后,就是下述图片的样式,其中最主要的内容就是admin,等到最后,我会单独讲解xxl-job框架中所有的相关内容都是什么意思。现在先按照步骤做即可

二、在使用xxl-job时所以要了解的知识(重要)

1、所要了解的知识

xxl-job共分为3大部分:任务调度器平台、任务执行器、任务处理器(jobHandler)、

任务调度器平台: 就是上述拉取下来的代码中的xxl-job-admin项目,这个项目就是任务调度平台。我们只需要配置一下就可以有自己的一个平台环境。而这个人任务调度器平台我们就可以理解为eureka(注册中心)

任务执行器执行任务处理器

任务处理器(jobHandler):通过自己在项目中自定义不同的任务处理器来让任务执行器执行,并通过调度器平台 处理不同的任务。

现在看不懂没事,等后续搭建起来之后,你就会全部理解。 

三、搭建任务调度器平台 

1、任务调度器平台

1.1、创建xxl-job-admin数据库

将这个.sql文件创建到你的数据库中,这个应该都会创建,数据库名字要为xxl_job防止不必要的错误。其实里边已经帮你写好了,这里我就以Navicat为例引入.sql文件

将.sql复制粘贴到桌面,然后通过Navicat引入即可。

1.2、配置yaml

首先去xxl-job-admin找到配置文件,并修改portmysqlmailxxl.job.accessToken

修改port

修改mysql

修改mail

邮箱的账号密码不知道的去百度搜索:java配置mail 

修改 xxl.job.accessToken

这个accessToken可以理解为秘钥,后面会在你自己的项目中配置和他名字一模一样的秘钥,让你的项目与任务调度器平台互相关联起来。

这里我就不做修改了,使用默认的,可以自定义。

1.3、配置logback.xml

路径可以自定义,我就放到我习惯的位置,你也可以放到你自己习惯的位置

在linux中先创建好自己的路径日志,然后赋权限,下面的命令,是给文件赋权限的

chmod -R 777 /home/dblog/xxl-job/xxl-job-admin.log

 1.4、启动任务调度器

配置好之后,用idea打包,并将jar在linux中运行。

1.4.1、修改jar名称

 我将xxl-job-admin-2.4.1-SNAPSHOT放到自己习惯的位置并修改了名称(个人习惯),不修改也可以。

#将jar通过后台进程启动,并将启动信息指向xxl-job-admin.log中  

nohup java -jar xxl-job-admin.jar > xxl-job-admin.log 2>&1 &

#查看日志

tail -f xxl-job-admin.log

 1.5、访问任务调度器
访问地址:http://自己的ip:自己设置的端口号/xxl-job-admin    

账号:admin  ;密码:123456

 好的!以上就是搭建好的xxl-job的调度器平台了,现在我们只需要在自己的项目中引入xxl-job依赖,然后配置一些东西,就可以在这个任务调度器平台来操作定时任务啦!!!

四、sprintboot引入xxl-job

1、引入xxl-job-core依赖

在自己的项目中引入xxl-job-core依赖;只需引入这一个依赖就行

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

 2、配置yaml

在自己的项目中配置yaml

xxl:job:admin:# 调度中心服务部署的地址addresses: http://192.168.139.110:9000/xxl-job-admin# 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册accessToken: default_tokenexecutor:# 执行器AppNameappname: job-demo# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。address:ip: 192.168.139.110#执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;port: 9999# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;logpath: /home/dblog/log/jobhandler# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;logretentiondays: 30

注意!!!!: logpath执行日志存储位置,也是需要自己在linux中创建的,和上述任务调度器平台创建一样,创建完成之后,设置权限。 

3、配置日志 

去你拉取的xxl-job项目中找到 logback.xml,复制到你自己项目的位置

复制到自己的项目中

3.1、修改日志路径

在linux创建,并且给权限,这个就偷下懒不写了,在任务调度平台中已经写过了,可以模仿写一下。

4、编写配置类

原封不动复制粘贴到你项目的位置就行即可,我一般习惯放到config下。这个配置类其实是可以在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;@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();*/}

xxl-job项目中的XxlJobConfig

上述的配置类代码,其实就是这个xxl-job项目中的XxlJobConfig  一模一样。 

 

 5、创建任务处理器类

将xxl-job中的SampleXxlJob复制到自己的项目中

 5.1、修改并编写代码

全部配置好之后,将自己的项目打包并部署到linux中,可以看到我的项目已经起来了。

接下来,就要去操作任务调度器平台了,来设置定时任务。

五、操作任务调度器平台(任务调度中心)

1、新增执行器

注意:自动注册,xxl-job会自动找到你的机器地址。

也就是你上述在自己项目中配置的执行器ip和端口号,如果你的机器地址为无,那么就手动注册。

2、新增任务处理器

JobHandler来源  

自己项目代码中自定义的名称。

 3、启动任务处理器

启动完成之后,你可以去linux,查看你刚才打印的信息,如果出现则代表成功。

还可以看调度日志

好啦!!以上就是xxl-job的使用啦,哇,深夜2点爆肝的,呜呜呜。希望各位看完之后,能够快速提升自己的实力吧。加油!

附加-运行模式:

BEAN模式

Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。

优点:每个任务只需要一个方法,添加@XxlJob注解即可,方便、快速。

缺点:需要Spring环境

GLUE模式(Java)

GLUE模式(Java)
任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下:

步骤一:调度中心,新建调度任务:
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 “GLUE模式(Java)”;

步骤二:开发任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。

 其他模式:略

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

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

相关文章

PyGWalker,一款超级强大的数据分析和数据可视化的工具库

PyGWalker可以有效简化Jupyter笔记本的数据分析和数据可视化工作流程&#xff0c;方法是将panda数据帧转换为Tableau风格的用户界面进行可视化探索。 PyGWalker被命名为“Graphic Walker的Python绑定”的缩写。它集成了Jupyter笔记本&#xff08;或其他基于Jupyter的笔记本&am…

Linux之静态库和动态库

目录 一、前言 二、对于库的理解 三、静态库 四、动态库 五、动静态库的加载 一、前言 在之前&#xff0c;我们讲了静态库和动态库&#xff0c;详情请跳转&#xff1a;静态库和动态库 下面我们将从工程师的角度&#xff0c;去了解静态库和动态库的形成过程&#xff0c;以…

【Linux操作】国产Linux服务管理操作

【Linux操作】国产Linux服务管理操作 前言SAMBA配置服务器端1. 安装相关包2. 配置/etc/samba/smb.conf&#xff0c;在此文件末尾添加如下内容&#xff0c;并保存退出。3. 创建/home/share并更改权限4. 启动samba服务 客户端• Windows客户端• 麒麟客户端 Telnet1、telnet语法2…

JOSEF约瑟端子排中间继电器 DZY-204 DC110V 导轨安装,板前接线

DZY系列端子排中间继电器 系列型号&#xff1a; DZY-101端子排中间继电器 DZY-104端子排中间继电器 DZY-105端子排中间继电器 DZY-301端子排中间继电器 DZY-106端子排中间继电器 DZY-401端子排中间继电器 DZY-204端子排中间继电器 一、 概述 DZY-204端子排中间继电器用于各种…

unity C#什么时候用“可空类型”

文章目录 例子1. **声明一个可空类型变量&#xff1a;**2. **给可空类型变量赋值&#xff1a;**3. **检查可空类型变量是否有值&#xff1a;**4. **转换与比较&#xff1a;**5. **使用null合并运算符&#xff1a;** 可空类型的重要意义1. **表示缺失或未知的值&#xff1a;**2.…

每日一博 - 使用APIFOX调测 @RequestBody标注的对象

文章目录 概述发送 post 请求步骤1.新建接口&#xff0c;设置为 post 请求2. 填写 URL 和参数3.发送请求 实战 RequestBody 概述 APIFOX&#xff08;类似Postman&#xff09;提供了丰富的功能来支持用户发送包含各种信息的 POST 请求&#xff0c;如文本数据、JSON 或 XML 数据…

云卷云舒:AI for DB、DB for AI

云卷云舒&#xff1a;算力网络云原生&#xff08;下&#xff09;&#xff1a;云数据库发展的新篇章-CSDN博客https://blog.csdn.net/bishenghua/article/details/135050556 随着数据库和AI技术的分支同向演进&#xff0c;AI 和数据库间的关联越发紧密了。 大模型的演进发展&a…

element中el-cascader级联选择器只有最后一级可以多选

文章目录 一、前言二、实现2.1、设置popper-class和multiple2.2、设置样式 三、最后 一、前言 element-ui中el-cascader级联选择器只有最后一级可以多选&#xff0c;其它级只有展开子节点的功能&#xff0c;如下图所示&#xff1a; 可以观察到最后一级的li节点上没有属性aria-…

java基础知识点系列——基础语法(三)

java基础知识点系列——基础语法&#xff08;三&#xff09; 注释 注释概述 注释是在程序指定位置添加的说明性信息。注释不参与程序运行&#xff0c;仅起到说明作用。 注释分类 单行注释&#xff0c;格式&#xff1a;// 注释信息多行注释&#xff0c;格式&#xff1a;/* …

面向对象的三大特征之二:继承 --java学习笔记

什么是继承? 关键字extends,用这个关键字&#xff0c;可以让一个类和另一个类建立起父子关系 继承的特点&#xff1a;子类能继承父类的非私有成员&#xff08;成员变量、成员方法&#xff09;继承后对象的创建&#xff1a;子类的对象时由子类、父类共同完成的 代码演示&am…

Hex Editor的使用教程(VS Code)

Hex Editor&#xff08;十六进制编辑器&#xff09;是一种用于查看和编辑计算机文件的低级别编辑工具。与常规文本编辑器不同&#xff0c;它允许用户直接查看和修改文件的二进制数据。在 Hex Editor 中&#xff0c;数据通常以十六进制&#xff08;hex&#xff09;格式显示&…

Qt/QML编程学习之心得:使用camera摄像头(35)

汽车应用中,camera起到了越来越多的作用,数字化的作用,这点无可争议,而作为GUI设计工具,如何让Camera类的应用能更好的发挥作用呢? You can use Camera to capture images and movies from a camera, and manipulate the capture and processing settings that get appl…

EI论文复现:考虑多能互补的综合能源系统/虚拟电厂/微电网优化运行程序代码!

本程序参考EI论文《基于多能互补的热电联供型微网优化运行》&#xff0c;文章通过储能设备解耦热电联系&#xff0c;建立基于多能互补的综合能源系统/虚拟电厂/微电网优化运行模型。模型包含系统供给侧的多能互补协调与需求侧的综合能源响应两个方面&#xff0c;使供给侧通过能…

Grind75第9天 | 733.图像渲染、542.01矩阵、1235.规划兼职工作

733.图像渲染 题目链接&#xff1a;https://leetcode.com/problems/flood-fill 解法&#xff1a; 可以用深度优先搜索和广度优先搜索。 深度优先搜索。每次搜索到一个方格时&#xff0c;如果其与初始位置的方格颜色相同&#xff0c;就将该方格的染色&#xff0c;然后继续对…

Qt构建MSVC2015环境过程

Qt构建MSVC2015环境过程 前言 之前用的Qt都是基于默认的MinGW编译器&#xff0c;由于目前工作的QT界面主要是跑在X86上&#xff0c;所以记录一下Qt配置MSVC2015的配置过程。根据查阅了解以后&#xff0c;个人理解的MinGW跟MSVC的区别在于前者主要是用于跨平台程序构建&#x…

Redis命令 - Hashes命令组常用命令

1、HSET key field value 设置 key 指定的哈希集中指定字段的值。 HSET key field value 返回值&#xff1a;1代表field是一个新的字段。0代表field已存在 如果 key 指定的哈希集不存在&#xff0c;会创建一个新的哈希集并与 key 关联。如果字段在哈希集中存在&#xff0c;它将…

软件需求分析报告—word

技术要求 1.1接口要求 1.2可靠性&#xff0c;稳定性&#xff0c;安全性&#xff0c;先进性&#xff0c;拓展性&#xff0c;性能&#xff0c;响应。 2.系统安全需求 2.1物理设计安全 2.2系统安全设计 2.3网络安全设计 2.4应用安全设计 2.5用户安全管理 进主页获取更多资料

靶场实战(15):OSCP备考之VulnHub STAPLER

打靶思路 资产发现 主机发现服务发现漏洞发现&#xff08;获取权限&#xff09; 21端口/FTP服务 组件漏洞口令漏洞139端口/SMB服务 组件漏洞口令漏洞666端口/doom服务 组件漏洞其它漏洞80端口/HTTP服务 组件漏洞URL漏洞12380端口/HTTP服务 组件漏洞URL漏洞12380端口/HTTPS服务 …

gitee创建远程仓库并克隆远程仓库到电脑

1、首先点加号新建一个仓库 2、输入仓库名&#xff0c;路径会自动填充&#xff0c;填写简单的仓库介绍&#xff0c;先选择私有&#xff0c;在仓库创建之后&#xff0c;可以改为开源 3、打开建好的仓库 4、复制仓库链接 5、打开一个文件夹(想要存储远程仓库的地址)&#xff0c;在…