【问题标题】:How to schedule task every second Monday and given hour in Java Springjava - 如何在Java Spring中每隔一个星期一和给定时间安排任务
【发布时间】:2021-08-24 12:25:15
【问题描述】:

有没有办法在 Spring 中安排一个任务,让它每隔一个星期一在给定时间(比如午夜)运行一次?我知道每周一午夜使用 cron 运行任务看起来像 0 0 0 * * MON,但对于我来说如何处理“每个其他”星期一有点模糊。

明确一点:如果我在 2021 年 6 月 6 日星期日部署我的应用程序,我希望任务在 07.06.2021、21.06.2021、05.07.2021 午夜运行

0 0 0 * * MON/2 这样的东西会起作用吗?或者我应该采取不同的方法,也许使用不同于 cron 的东西?

任何帮助将不胜感激

【问题讨论】:

    标签: java spring cron scheduled-tasks


    【解决方案1】:

    不,Cron 在 JAVA 中没有这样的东西。它在 linux 和 unix 机器中有某种​​解决方法,但在 java 中没有。

    但是您可以通过使用每月的几周以编程方式实现它。

    
        Calendar c = Calendar.getInstance();
           if(c.get(Calendar.WEEK_OF_MONTH) % 2 != 0) {
                 //execute job
           } else {
                 //not execute job just skip operation
           }
    

    上面的代码在一个月的所有奇数周执行。假设某个月有 5 周,这将在该月的 1,3 和 5 运行,并将在下个月的第 1 周再次运行。

    如果您非常希望它每月只运行两次,则可以通过检查每月的周数是否大于 4 来阻止它并阻止它。 (* 没查过,试试看)

    
        Calendar c = Calendar.getInstance();
           if(c.get(Calendar.WEEK_OF_MONTH) % 2 != 0 && !c.get(Calendar.WEEK_OF_MONTH)>4) {
                 //execute job
           } else {
                 //not execute job just skip operation
           }
    

    【讨论】:

    • 感谢您的回答,我很可能会在代码中而不是 cron 表达式中执行此操作,但您发布的 sn-ps 不能满足我的要求 - 如果有一个月5 个星期一,我希望我的工作在该月的第 1、3 和 5 个星期一运行,然后在下一个的第 2 和 4 个星期一运行。
    • 是的,这将是问题所在,因为我的将在第一个月的 1 号、3 号和 5 号运行,并且将在下个月的 1 号再次运行。万事如意
    猜你喜欢
    • 2015-11-22
    • 2021-04-25
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2018-10-18
    • 2012-06-24
    • 2017-02-17
    相关资源
    最近更新 更多