问题描述
用户自定义提醒时间, 举例一个例子,用户添加一个练习设置每周一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剔除,并且新增一条
③. 删除的时候同理