V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lyusantu
V2EX  ›  程序员

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

  •  
  •   lyusantu · 2022-10-18 14:24:09 +08:00 · 1761 次点击
    这是一个创建于 762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有几个需求

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

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

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

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

    具体要发给谁,发什么,方法里正常写 CRUD 就行了。
    lyusantu
        4
    lyusantu  
    OP
       2022-10-18 14:47:44 +08:00
    @wxw752 这个几点和几点是要在后台有一个配置项的,不是直接写好表达式..
    wu00
        5
    wu00  
       2022-10-18 14:53:34 +08:00
    你的业务规则跟你的 cron 表达式有什么关系呢!
    cron 表达式负责定时触发你的任务;任务执行你的业务规则。
    nekolr
        6
    nekolr  
       2022-10-18 14:56:27 +08:00
    @lyusantu 你的意思是之前都是注解上写的固定表达式是吧?其实这个表达式是支持 SpEL 的,或者如果你用的是 quartz ,可以手动编写触发器的。
    yzxhzxsw
        7
    yzxhzxsw  
       2022-10-18 14:59:30 +08:00
    可以看一下 xxl-job
    lyusantu
        8
    lyusantu  
    OP
       2022-10-18 15:01:57 +08:00
    @wolfie
    @HHHHHQ
    @wxw752
    @wu00
    @nekolr
    @yzxhzxsw 感谢,已找到解决方案,结贴了
    hidemyself
        9
    hidemyself  
       2022-10-18 15:15:05 +08:00
    @lyusantu 所以解决方案是什么
    lyusantu
        10
    lyusantu  
    OP
       2022-10-18 15:22:46 +08:00
    Quartz 有一个 DailyTimeIntervalScheduleBuilder ,之前没用过,刚看文档应该是可行的
    frank42a
        11
    frank42a  
       2022-10-18 16:50:38 +08:00
    Spring 定时器可以吗?
    Marcoo
        12
    Marcoo  
       2022-10-18 17:24:45 +08:00
    @lyusantu 你要用 quartz 的话 这些动态定时任务都是最基本的能力,写好 CronTrigger 就行
    Seulgi
        13
    Seulgi  
       2022-10-19 09:29:07 +08:00
    帮你改一下描述.
    1. 每隔 N 天的 X 点, 给最近登录时间大于等于 N 天的用户发送一条消息通知
    2. 每天 X 点, 给积分达到 N 的用户推送一条通知.
    结论, 均是每天 X 点的一个定时任务, 而非动态任务.
    Seulgi
        14
    Seulgi  
       2022-10-19 09:31:30 +08:00
    xxl-job, xxl-job-admin 端口暴露, 后端配置好后, 删除上一次设置的定时, 设置最新的定时. x 点是用于设置定时, N 是用于定时任务代码的参数入参.
    w292614191
        15
    w292614191  
       2022-10-19 14:10:11 +08:00
    xxl-job 最优解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5295 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:39 · PVG 17:39 · LAX 01:39 · JFK 04:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.