不懂就问 关于 Java 动态配置定时任务的问题

2022-10-18 14:24:09 +08:00
 lyusantu

有几个需求

  1. 每隔 N 天的 N 点给最近 N 天没有登录的用户发送一条消息通知
  2. 每天 N 点给积分达到 N 的用户推送一条积分可兑换商品的消息通知

平常都是直接在定时任务上直接写好表达式的,现在这种动态的不太理解要怎么实现,做过此类型的麻烦指点一下思路,感谢~ (开发语言是 Java)

1765 次点击
所在节点    程序员
15 条回复
wolfie
2022-10-18 14:33:58 +08:00
没关系,定时任务作用是触发,你这是具体的筛选条件。
HHHHHQ
2022-10-18 14:38:57 +08:00
按我理解,第 1 个需求,是一个用户,N 天没有登录后,在当天的 M 点发送消息通知。用户量不大的情况下,感觉可以直接使用 redis 计数器记录用户的登录次数,每天 0 点先+1 ,登录后删除 key 。定时任务设置在每天 M 点,把数据取出来判断就行。
第 2 个需求其实同理,建一个每天 N 点的定时任务,积分做 redis 缓存。到时间取出来判断。
其实都只是定时任务,只不过你在定时任务触发的时候,去把符合要求的数据搞出来。

另外如果不是一定要求定点推送的话,可以用触发机制。
wxw752
2022-10-18 14:43:20 +08:00
cron 表达式里写好每隔几天几点执行。

具体要发给谁,发什么,方法里正常写 CRUD 就行了。
lyusantu
2022-10-18 14:47:44 +08:00
@wxw752 这个几点和几点是要在后台有一个配置项的,不是直接写好表达式..
wu00
2022-10-18 14:53:34 +08:00
你的业务规则跟你的 cron 表达式有什么关系呢!
cron 表达式负责定时触发你的任务;任务执行你的业务规则。
nekolr
2022-10-18 14:56:27 +08:00
@lyusantu 你的意思是之前都是注解上写的固定表达式是吧?其实这个表达式是支持 SpEL 的,或者如果你用的是 quartz ,可以手动编写触发器的。
yzxhzxsw
2022-10-18 14:59:30 +08:00
可以看一下 xxl-job
lyusantu
2022-10-18 15:01:57 +08:00
@wolfie
@HHHHHQ
@wxw752
@wu00
@nekolr
@yzxhzxsw 感谢,已找到解决方案,结贴了
hidemyself
2022-10-18 15:15:05 +08:00
@lyusantu 所以解决方案是什么
lyusantu
2022-10-18 15:22:46 +08:00
Quartz 有一个 DailyTimeIntervalScheduleBuilder ,之前没用过,刚看文档应该是可行的
frank42a
2022-10-18 16:50:38 +08:00
Spring 定时器可以吗?
Marcoo
2022-10-18 17:24:45 +08:00
@lyusantu 你要用 quartz 的话 这些动态定时任务都是最基本的能力,写好 CronTrigger 就行
Seulgi
2022-10-19 09:29:07 +08:00
帮你改一下描述.
1. 每隔 N 天的 X 点, 给最近登录时间大于等于 N 天的用户发送一条消息通知
2. 每天 X 点, 给积分达到 N 的用户推送一条通知.
结论, 均是每天 X 点的一个定时任务, 而非动态任务.
Seulgi
2022-10-19 09:31:30 +08:00
xxl-job, xxl-job-admin 端口暴露, 后端配置好后, 删除上一次设置的定时, 设置最新的定时. x 点是用于设置定时, N 是用于定时任务代码的参数入参.
w292614191
2022-10-19 14:10:11 +08:00
xxl-job 最优解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX