以前公司平台中集成了定时任务功能,但平台内部实现比较简单,使用方式有些受限,比如说无法跟踪定时任务执行状态,无法自动解决集群状态下的任务争抢问题,因此考虑升级一下任务实现方式,搜集一番后,Quartz和Xxl-Job都能满足现在的需求;以下就对两种定时任务框架进行简单说明 。
Quartz
文章插图
传送门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包的依赖情况如下:文章插图
如果不是maven项目,单独下载jar包使用的情况,不要漏掉jar包;可通过官网下载的方式获取到所有的jar包;配置文件最终编译后的位置:WEB-INF/classes/quartz.properties
官网不知道怎么回事儿,超级慢;
我一般的做法是,本地建立一个单独的maven项目,加入相关maven依赖,然后通过下面的maven命令获取到所有pom.xml文件中的jar包;然后再复制到自己需要放的地方;
mvn dependency:copy-dependencies -DoutputDirectory=lib
下面是一个最基本的配置项内容:
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一起使用,然后再用数据库打开一个全新的维度 。
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(),因为将有活动线程 。
推荐阅读
- AngularJS与Vue.JS,2022年选择哪个框架?
- 一个简单快速的MyBatis开发框架
- 2022:为什么 NestJS 是最好的后端框架
- JAVA三大框架
- PHP脚本执行定时任务的流程实例
- 5个前端开发框架的发展趋势
- 一篇文章教会你使用Python定时抓取微博评论
- uniapp框架开发技巧
- Python 语言Django 框架的简化视图
- 1070TI显卡不定时瞬间黑屏后又恢复频繁出现故障解决方法