文章目录

  • 1 项目搭建
  • 2 入门程序
    • 2.1 调度中心的部署
      • 2.1.1 准备工作:下载源代码
      • 2.1.2 application.properties配置文件介绍和修改
      • 2.1.3 初始化调度中心数据库
      • 2.1.4 打包部署
    • 2.2 创建执行器
    • 2.3 job开发
      • 2.3.1 API介绍
      • 2.3.2 定义一个demoJob继承IJobHandler
      • 2.3.3注册任务到执行器
      • 2.3.4启动类
    • 2.3 调度中心新建任务
    • 2.4 测试
    • 2.5 总结
      • 2.5.1 开发步骤
      • 2.5.2 xxl的job模式

1 项目搭建

  1. 新建一个maven父工程:pom文件中dependencyManagement声明依赖外部jar包的版本
    核心就是xxljob的jar:
       <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version></dependency>

完整内容如下:

<dependencyManagement><dependencies><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies>
</dependencyManagement>
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><target>1.8</target><source>1.8</source></configuration></plugin></plugins>
</build>

2 入门程序

新建一个子模块01-xxl-job-quickstart:通过一个简单的demo,体验一下xxljob的使用
本次用的版本是2.2.0

2.1 调度中心的部署

根据前面的介绍,xxljob是通过调度中心rpc调用执行器,执行任务的。首先部署调度中心

作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

2.1.1 准备工作:下载源代码

  1. 下载xxljob的源码,切换到对应版本的分支
    码云地址:http://gitee.com/xuxueli0323/xxl-job
    github地址:https://github.com/xuxueli/xxl-job
  2. 源码中的 xxl-job-admin模块就是调度中心,是一个springboot项目。

2.1.2 application.properties配置文件介绍和修改

xxl-job-admin模块就是调度中心,是一个springboot项目。简单介绍一下配置文件

### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
###报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
###调度中心通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
###调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;
xxl.job.i18n=zh_CN
##调度线程池最大线程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
###调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
xxl.job.logretentiondays=30

我们修改的主要就是一下几个:

  • 端口号:默认是8080,可根据自己的喜好改自己的端口,这里我就改成1111
  • 数据库链接地址:这里我就没做修改,数据库名字为:xxl_job
  • 将数据库链接的用户名和密码改为自己的。

2.1.3 初始化调度中心数据库

  1. 数据库脚本文件位置:/xxl-job/doc/db/tables_xxl_job.sql
  2. 创建数据库,根据刚刚配置的数据库名字创建对应的数据库
  3. 执行sql脚本

2.1.4 打包部署

  1. mvn clean package
  2. java -jar
  3. 访问:http://localhost:1111/xxl-job-admin


默认用户名和密码:admin/123456

到此调度中心部署完成

可以刚刚的jar包保存,以后自己本地测试就可以使用这个jar包,直接java -jar运行

2.2 创建执行器

下面就是在调度中心创建执行器

  1. 打开执行器管理、
  2. 新增执行器

2.3 job开发

2.3.1 API介绍

  1. 抽象类:com.xxl.job.core.handler.IJobHandler
    所有的job需要继承该抽象基类,实现其抽象方法execute
public abstract class IJobHandler {/** success */public static final ReturnT<String> SUCCESS = new ReturnT<String>(200, null);/** fail */public static final ReturnT<String> FAIL = new ReturnT<String>(500, null);/** fail timeout */public static final ReturnT<String> FAIL_TIMEOUT = new ReturnT<String>(502, null);/*** execute handler, invoked when executor receives a scheduling request** @param param* @return* @throws Exception*/public abstract ReturnT<String> execute(String param) throws Exception;/*** init handler, invoked when JobThread init*/public void init() throws InvocationTargetException, IllegalAccessException {// do something}/*** destroy handler, invoked when JobThread destroy*/public void destroy() throws InvocationTargetException, IllegalAccessException {// do something}
}

2.3.2 定义一个demoJob继承IJobHandler

package study.wyy.job.xxl.task;import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.log.XxlJobLogger;import java.util.concurrent.TimeUnit;/*** @author wyaoyoa* @description* @date 2021/1/4 15:07*/public class DemoJob extends IJobHandler {public ReturnT<String> execute(String param) throws Exception {// 执行日志:需要通过 "XxlJobLogger.log" 打印执行日志XxlJobLogger.log("demo job start.... param is: "+param);TimeUnit.SECONDS.sleep(5);XxlJobLogger.log("demo job end.... param is: "+param);return ReturnT.SUCCESS;}
}

2.3.3注册任务到执行器

package study.wyy.job.xxl.config;import com.xxl.job.core.executor.XxlJobExecutor;
import lombok.extern.slf4j.Slf4j;
import study.wyy.job.xxl.task.DemoJob;/*** @author wyaoyao* @description* @date 2021/1/4 15:23* 配置job*/
@Slf4j
public class XxlJobConfig {XxlJobExecutor xxlJobExecutor;// 配置job的执行器:public void initXxlJobExecutor(){// 注册任务,这里的key后面会用到XxlJobExecutor.registJobHandler("demoJob",new DemoJob());xxlJobExecutor = new XxlJobExecutor();// 设置调度中心地址xxlJobExecutor.setAdminAddresses("http://localhost:1111/xxl-job-admin");// 设置应用名字xxlJobExecutor.setAppname("xxl-job-quickstart");// 设置执行器的端口和ip 可以不指定,调度中心可以自动发现ip//xxlJobExecutor.setIp("127.0.0.1");xxlJobExecutor.setPort(9999);//xxlJobExecutor.setAddress("http://localhost:9999");// 执行器运行日志文件存储磁盘路径 [选填]xxlJobExecutor.setLogPath("D:\\log\\xxljob\\executor");// 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;xxlJobExecutor.setLogRetentionDays(4);// 启动执行器try {xxlJobExecutor.start();} catch (Exception e) {log.error(e.getMessage(),e);e.printStackTrace();}}// 当我们的程序结束的时候需要销毁执行器public void destroy(){if (xxlJobExecutor != null) {xxlJobExecutor.destroy();}}
}

2.3.4启动类

package study.wyy.job.xxl;import com.xxl.job.core.executor.XxlJobExecutor;
import lombok.extern.slf4j.Slf4j;
import study.wyy.job.xxl.config.XxlJobConfig;import java.util.concurrent.TimeUnit;/*** @author wyaoyao* @description* @date 2021/1/4 16:02*/
@Slf4j
public class Client {public static void main(String[] args) {XxlJobConfig xxlJobConfig = new XxlJobConfig();try {// 配置执行器,并启动xxlJobConfig.initXxlJobExecutor();while (true) {TimeUnit.HOURS.sleep(1);}}catch (Exception e){log.error(e.getMessage(),e);}finally {xxlJobConfig.destroy();}}
}

2.3 调度中心新建任务



这里配置的任务参数会被传递到execute方法的形参中,是字符串类型

2.4 测试

  1. 启动启动类
  2. 调度中心启动任务
  3. 观察执行日志

2.5 总结

2.5.1 开发步骤

开发来说还是比较麻烦的,不是很喜欢,哈哈哈,

  1. 部署调度中心服务
  2. 创建执行器
  3. 开发任务
  4. 向执行器中注册任务,配置执行器的一些基本配置信息
    • 执行器的ip和端口:观察启动日志,可以发现,xxljob会启动一个netty服务
    • 设置调度中心的地址
    • 设置应用的名字
    • 设置日志相关配置:日志保存路径和日志保存时间
  5. 调度中心中选择执行器并创建任务,配置任务的基本信息
    • cron表达式
    • 任务的模式:bean模式和glue模式(入门程序演示的是bean模式)
    • 任务的超时时间,参数,路由策略等等
  6. 启动我们的程序之后,再去调度中心启动任务

启动日志中,netty服务的启动

xxljob也依赖了netty,xxl应该是会将执行器作为一个netty服务,调度中心通过rpc远程调用执行器,触发任务。

2.5.2 xxl的job模式

  • BEAN模式(类形式)
    Bean模式任务,支持基于类的开发方式,每个任务对应一个Java类。刚刚的入门程序便是采用的这个模式
    优点:不限制项目环境,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持
    缺点:每个任务需要占用一个Java类,造成类的浪费;不支持自动扫描任务并注入到执行器容器,需要手动注入。

  • BEAN模式(方法形式)
    Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。
    优点:每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    支持自动扫描任务并注入到执行器容器。
    缺点:要求Spring容器环境;

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

02 xxljob快速入门相关推荐

  1. 【个人笔记】OpenCV4 C++ 快速入门 02课

    个人资料,仅供学习使用 修改时间--2022年2月6日 11:40:46 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 02 图像色彩空间转换 opencv知识点: 色彩空间 ...

  2. Medusa(美杜莎)和Hydra(九头蛇)快速入门手册:02

    本文是Medusa和Hydra快速入门手册的第二部分,第一部分的传送门这两篇也是后续爆破篇的一部分,至于字典,放在最后,后续会把祖传的几十G字典准备好 Hydra入门使用手册 vanHauser Th ...

  3. 【安全利器SELinux快速入门系列 | 02】SELinux 策略实施的可视化操作指南

    这是机器未来的第40篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126117336 SELinux 策略实施的可视化操作 ...

  4. .Net Core 3.0 IdentityServer4 快速入门02

    .Net Core 3.0 IdentityServer4 快速入门 -- resource owner password credentials(密码模式) 一.前言 OAuth2.0默认有四种授权 ...

  5. Sers微服务快速入门-02.快速接入

    微服务给我们的第一映像是架构复杂,部署起来麻烦.其实并非如此,不同的架构选型必然带来不同的优点和缺点,没有一劳永逸的方法,配置简单是因为适用的场景面窄.在项目或产品的实际开发中往往随着时间的推进需要实 ...

  6. 【自动驾驶模拟器AirSim快速入门 | 02】数据预处理:数据挖掘与准备

    这是机器未来的第16篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125321082 开源项目: 项目地址:https:/ ...

  7. SWMM从入门到实践教程 02 快速入门案例的绘制

    文章目录 1 建模准备 2 设置各类设施 2.1 添加雨量计 2.2 添加子汇水区(正方形) 2.3 绘制节点(圆形) 2.4 绘制管渠 2.5 添加排水口(三角形) 3 画面调节 1 建模准备 建模 ...

  8. 【UE4学习】02——C++编程快速入门

    官方文档教程:点击打开链接 在本教程的过程中,我们会创建新的虚幻引擎项目,向其添加新的C++类,然后编译项目并添加新类的实例到关卡中. 在完成后,我们会看到以C++来编程的Actor在屏幕上的移动. ...

  9. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

最新文章

  1. 用命令行操作 VirtualBox 和 SGD
  2. egret 开发总结
  3. JQuery对象和JS对象区别与转换|| 事件绑定 入口函数 样式控制
  4. ubuntu 14.04 安装Java JDK
  5. python frame用法_python—dataframe用法
  6. java实现打印等腰三角形
  7. openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)
  8. 初学大数据之Pycharm常用的快捷键总结
  9. Sphinx 文档例子
  10. CentOS 6.5下Redis安装详细步骤
  11. Charles Https 请求 SSL乱码问题 charles unreadable
  12. ADS(Advanced Design system)仿真后绘图和绘图技巧
  13. html5 如何打包成apk,将H5封装成android应用APK文件的几种方法
  14. 关于国内几大云计算平台
  15. 恶意程序新趋势-钻粪坑+数签
  16. 想要糖尿病逆转,健康饮食必不可少
  17. 字符编码Unicode原理
  18. Java将byte流转换成zip文件_java zip文件的压缩与解压
  19. Mybatis|CURD|配置详解|注解开发|多点查询|动态sql|缓存
  20. matlab ext2int,PF_MATLAB_new 一个非常不错的粒子滤波工具箱,基于面向对象的思 实 实现非线性 ,包 238万源代码下载- www.pudn.com...

热门文章

  1. PAT乙级——1005
  2. 计算机图形学:Cohen-Sutherland直线段剪裁算法及梁友栋-Barsky裁剪算法(算法原理及代码实现)
  3. Swinsian for Mac(高级音乐播放器)
  4. 数字电路也需要注意电源滤波 (1117-3.3V芯片工频干扰一例)
  5. addmodule 和aucell打分评分
  6. 广州徳恒信息技术有限公司——软件实施工程师
  7. 如何提升数据分析能力?
  8. 魅族魅蓝不开机怎么办?官方原厂救砖固件下载
  9. 原子操作(atomic operation)
  10. 将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法?