定时任务框架选型Quartz/Xxl-Job

以前公司平台中集成了定时任务功能,但平台内部实现比较简单,使用方式有些受限,比如说无法跟踪定时任务执行状态,无法自动解决集群状态下的任务争抢问题,因此考虑升级一下任务实现方式,搜集一番后,Quartz和Xxl-Job都能满足现在的需求;
以下就对两种定时任务框架进行简单说明 。
Quartz
定时任务框架选型Quartz/Xxl-Job

文章插图
 
传送门github地址:
https://github.com/quartz-scheduler/quartz
Maven坐标<!-- Quartz Core --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version></dependency>可以查看jar包的依赖情况如下:
定时任务框架选型Quartz/Xxl-Job

文章插图
 
如果不是maven项目,单独下载jar包使用的情况,不要漏掉jar包;可通过官网下载的方式获取到所有的jar包;
官网不知道怎么回事儿,超级慢;
我一般的做法是,本地建立一个单独的maven项目,加入相关maven依赖,然后通过下面的maven命令获取到所有pom.xml文件中的jar包;然后再复制到自己需要放的地方;
mvn dependency:copy-dependencies -DoutputDirectory=lib
配置文件最终编译后的位置:WEB-INF/classes/quartz.properties
下面是一个最基本的配置项内容:
org.quartz.scheduler.instanceName = MySchedulerorg.quartz.threadPool.threadCount = 3org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore其中
此配置创建的调度器有以下特点:
  • org.quartz.scheduler.instanceName -这个调度程序的名称将是“MyScheduler” 。
  • org.quartz.threadPool.threadCount- 线程池中有3个线程,这意味着最多可以同时运行3个任务 。
  • org.quartz.jobStore.class - Quartz的所有数据,比如任务和触发器的细节,都保存在内存中(而不是数据库中) 。即使你有一个数据库,并且想要在Quartz上使用它,我建议你先让Quartz和RamJobStore一起使用,然后再用数据库打开一个全新的维度 。
任务信息任务信息处理类实现了org.quartz.Job 接口;如下
public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext)throws JobExecutionException {System.out.println("hello @ "+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));}}任务调度一旦使用
StdSchedulerFactory.getDefaultScheduler()获得一个调度器,您的应用程序将不会终止,直到您调用schedul. shutdown(),因为将有活动线程 。


    推荐阅读