使用quartz集群开发定时任务整理

本文介绍了在微服务架构中使用spring+quartz搭建定时任务服务,详细阐述了如何处理配置文件读取、集群环境下的资源同步、任务状态动态管理以及手动触发任务时的注意事项,包括解决ObjectAlreadyExistsException异常、任务重复执行和任务不执行等问题。
摘要由CSDN通过智能技术生成

在微服务环境下,定时任务也需要独立为一个服务。这里使用spring+quartz搭建定时任务开发环境。

在Config加载quartz.properties配置文件时,本地环境因为资源文件我们都存放在项目resource下,可使用ClassPathResource去拿到资源文件。可是在集成、测试、生产环境下,一般会把配置文件都拿出来统一放在项目外的一个文件中,而ClassPathResource会从项目根目录下开始查找资源,于是会拿不到项目外的quartz.properties,导致定时任务执行可能会与预期结果不一致,尤其是在集群环境中。读取资源文件可采用PathResouce读取配置文件的绝对路径。

我们将调度信息存储在mysql中,按照quartz规范在数据库建立QRTZ_JOB_DETAILS,QRTZ_TRIGGERS等共11张表。建表sql可在quartz发型包中/docs/dbTables里看到。配置

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_  

quartz.properties有几个配置可以注意下。集群的配置

org.quartz.jobStore.isClustered = true 开启集群特性
org.quartz.jobStore.clusterCheckinInterval = 20000 设置Scheduler实例节点检测频率,节点出现问题会被发现
org.quartz.jobStore.misfireThreshold = 60000 设置定时任务失火阈值,当前时间超过原定执行时间若是在阈值之内,就可以执行

新建一个任务表用于存放我们配置要执行的任务信息quartz_config表,任务(组)名,触发器(组)名,执行类,cron表达式等,可以在前端页面对任务管理。在进行周期性任务状态变化检测时,需要取quartz_config内的值来进行判断。这里使用实现SchedulingConfigurer接口来完成动态定时任务

    /**
     * 执行定时任务.
     */
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.addTriggerTask(
                //1.添加任务内容(Run
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值