瓜瓜醒 2021-03-27 11:11 采纳率: 0%
浏览 208

quartz是否支持大批量的实现自定义时间规则进行任务调度

问题描述

用户自定义提醒时间, 举例一个例子,用户添加一个练习设置每周一15:30提醒,用户可以修改提醒时间,新增提醒时间,删除提醒时间,提醒量大的时候,基本等于每分钟都可能存在提醒,使用quartz是否支持大批量的实现自定义时间规则进行任务调度或者有没有其他好的解决方法

问题出现的环境背景及自己尝试过哪些方法

 

我们用的是quartz定时调度,先说下我的思路:
首先有三张表,一张是练习表:practice,另一张是消息提醒表:notice_remind,他们的关系是 一对多
另外一张是: 记录quartz的动态cron表达式表 sys_job
方式一. 用户添加的每一条提醒先插入到提醒表里边,根据选择的周期规则以及时间计算出cron表达式,同步到quartz中的sys_job表 ,
JOB_NAME : 对应提醒的主键id
JOB_GROUP: 对应练习Id
到时刻自动提醒
好处: ①. 修改时间即修改cron表达式,重新在加入到quartz中,也很方便,
②. 删除提醒时间,同时停止这个定时任务也很方便
坏处: ①.对于用户来说,可能存在多个cron表达式相同的问题,在同一时间多次触发同一个job,但是不知道会带来一些其他的问题,定时任务多的时候quartz能否支撑柱,对于服务端来说是否太占用资源

方式二. 在计算出cron表达式的时候,基于这个cron表达式看数据库有没有(这里说明一下由于定义的规则有限(每天,工作日,每周一,每周二…每周日),cron表达式肯能会出现相同的情况),有的话,在sys_job表里边的job_data_map字段记录当前练习的id,多个用逗号分隔例如:(1,2,3,4,5…)
到时刻触发的的时候基于获取job_data_map对应的练习id,查询练习表,组装参数发送提醒

好处: ①. 相对于方法一,可能会节省数据库存储,并且不会在同一时刻多次触发同一个job
坏处: ②. 修改的时候比较麻烦,需要将原先 job_data_map字段记录的练习id剔除,并且新增一条
③. 删除的时候同理

 

  • 写回答

2条回答 默认 最新

  • 三岁丫 2021-03-27 21:40
    关注

    看了一下,其实方式二的话,已经可以了,适合业务的就行了。非要说的话,其实就是可以用一个任务每秒钟触发一次,它的任务就是检查有没有需要通知的,然后再发送通知消息啥的,如果用户时间填的很散的话,那么就需要生成大量的定时任务,其实不方便维护。

    评论

报告相同问题?

悬赏问题

  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit
  • ¥15 请问双层规划模型的上下层目标函数不一致,是如何保证迭代收敛性的
  • ¥15 微信小程序 前端页面内容搜索
  • ¥15 cpu是如何判断当前指令已经执行完毕,然后去执行下条指令的
  • ¥15 安装visual studio2022时visualstudiosetup启动不了,闪退。问题代号0x0和0x1389
  • ¥30 java spring boot2.5.3版本websocket连不上
  • ¥15 angular js调外部链接查看pdf
  • ¥15 openFOAM DPMFoam
  • ¥15 将查询到的值,赋值到table指定行中