定时任务框架选型Quartz/Xxl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务框架选型Quartz/Xxl相关的知识,希望对你有一定的参考价值。

参考技术A

以下就对两种定时任务框架进行简单说明。

github地址:https://github.com/quartz-scheduler/quartz

可以查看jar包的依赖情况如下:

最终编译后的位置: WEB-INF/classes/ quartz.properties

下面是一个最基本的配置项内容:

其中

此配置创建的调度器有以下特点:

任务信息处理类实现了org.quartz.Job 接口;如下

一旦使用StdSchedulerFactory.getDefaultScheduler()获得一个调度器,您的应用程序将不会终止,直到您调用schedul. shutdown(),因为将有活动线程。

注意代码示例中的静态导入

这些将在下面的代码示例中发挥作用。

更详细地配置文件说明在这儿:

https://github.com/quartz-scheduler/quartz/blob/master/docs/configuration.adoc

表文件在jar包的org.quartz.impl.jdbcjobstore,可根据数据库类型选择不同的数据库文件;

quartz也提供了数据库方面的任务配置及集群下的任务处理;

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

官网:https://www.xuxueli.com/xxl-job/

gitee传送门:https://gitee.com/xuxueli0323/xxl-job/tree/master

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

获得到目录结构

/xxl-job/doc/db/tables_xxl_job.sql

调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上的调度任务,负责触发调度执行,并且提供任务管理平台。

调度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/application.properties【修改数据库配置】

/xxl-job/xxl-job-admin/src/main/resources/logback.xml

完成上述修改后,然后运行XxlJobAdminApplication

运行成功后通过浏览器打开:http://localhost:8080/xxl-job-admin/,用户名及密码:admin/123456

至此“调度中心”项目已经部署成功。

执行器项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
作用:负责接收“调度中心”的调度并执行;可以直接部署执行器,也可以将执行器集成到现有业务项目中。

配置文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/

请点击任务右侧 “执行” 按钮,可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度触发)。

请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。
在任务日志界面中,可查看该任务的 历史 调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。

磁盘上的日志文件路径在xxl.job.executor.logpath

xxl-job(许雪里开发),分布式任务调度平台+定时任务

xxl-Job(分布式任务调度中心(许雪里开发)

面试题:你的项目是分布式的,项目的定时任务是怎么做的?

分布式任务调度如果让你来实现,有什么思路,怎么实现? 有没有了解过一些开源的方案来解决这一块问题?

集中式任务调度的框架Quartz

它是一个单体项目的定时框架,也是我们java开发中常见的定时任务。

什么是定时任务?

是指在指定的时间去执行任务(业务代码)

java实现定时任务的一些方式

  1. while(true)+Thread.sleep(轮询+线程休眠)
  2. ScheduledExecutorService 一个并发工具类,是最理想的定时任务的实现方式。(现在用的比较少)
  3. Quartz
  4. Spring Task Spring提供的轻量级的定时任务工具
  5. SpringBoot 注解 @EnableScheduling+@Scheduled 底层依然采用Spring Task

实现步骤(调度中心+执行器)

调度中心是xxl-job-admin模块,这个模块可以部署到Linux,你的公司的服务器上面。

JobHandler类里面写上你的主要的业务逻辑代码

  1. 写上一个xxxJobHandler类,加上一个@JobHandler(value=“名字”) 注解,这个注解里面的名字和xxl-job-admin管理的任务管理的JobHandler里面的名字是一样的

  2. 继承IJobHandler类

  3. @Override execute()里面写上你的业务逻辑,如果想要操作数据库可以上面@Autowired你的Mapper文件等等

    编辑执行器:配置多个ip地址进行集群操作。


路由策略:有轮询(多个ip的话,每个ip分别调度一次的来),故障转移(有一台服务出现故障可以转移到另外一台执行)

Cron:表达式用于写上定时的时间

运行模式:Bean表示是Spring容器托管的模式,其他的模式可以在线敲代码。

阻塞策略:一般使用单机串行,也就是一个任务没有成功。

为了完全起见,调度中心xxl-job-admin也可以实现集群部署。,实现多个调度中心,多个服务。

可以把xxl-job-admin模块的application.properties的端口号修改一下,打成jar包(先在maven里面clean,然后pacakage,然后部署到Linux服务器)

java -jar 你的jar包的名字

集群部署之后可以通过Nginx进行负载均衡,反向代理。

  1. 首先会拦截/xxl-job-admin,进行代理到http://xxl-job.admin
  2. 然后 转发到 127.0.0.1:8080
  3. 我们可以在windows的hosts文件中配置127.0.0.1 www…jobs.com的映射。

即使是集群部署,也不会调度任务再次,里面加上了锁

5SpringBoot整合xxl-job

  1. 引入依赖
  2. 配置文件信息,application.yml
  3. 配置XxlJobConfig
  4. 创建handler接口继承IJobHandler,重写里面的execute()方法。

6 xxl-Job的设计思想

  1. 调度中心被抽取成一个公共平台,不承担任何其他的业务逻辑。
  2. 任务抽象成JobHandler,交由执行器管理,负责相关业务逻辑。

以上是关于定时任务框架选型Quartz/Xxl的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合xxl-job分布式定时任务图文完整版

SpringBoot定时任务 - 开箱即用分布式任务框架xxl-job

xxl-job(许雪里开发),分布式任务调度平台+定时任务

SpringBoot结合XXL-JOB实现定时任务

创建定时任务的 5 种方式,还有谁不会!!

创建定时任务的 5 种方式,还有谁不会!!