不懂就问 关于 Java 动态配置定时任务的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lyusantu
V2EX    程序员

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

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

    有几个需求

    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 缓存。到时间取出来判断。
    其实都只是定时任务,只不过你在定时任务触发的时候,去把符合要求的数据搞出来。

    另外如果不是一定要求定点推送的话,可以用触发机制。
    rockddd
        3
    rockddd  
       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 ,可以手动编写触发器的。
    NextGen
        7
    NextGen  
       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     Solana     2774 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:04 PVG 23:04 LAX 07:04 JFK 10:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86