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

quartz 定时器周期设定

  •  
  •   qian88199496 · 2019-09-25 11:12:17 +08:00 · 2042 次点击
    这是一个创建于 1886 天前的主题,其中的信息可能已经有所发展或是发生改变。

    "* * * */7 * ?"
    请问这样是否是每七天执行一次呢?

    11 条回复    2019-09-25 16:23:47 +08:00
    airfling
        1
    airfling  
       2019-09-25 11:15:51 +08:00
    那你为啥不直接直接设置为每周几执行一次
    qian88199496
        2
    qian88199496  
    OP
       2019-09-25 11:17:10 +08:00
    @airfling #1 因为想在启动的时候直接运行啊,相隔一周执行一次
    airfling
        3
    airfling  
       2019-09-25 11:23:56 +08:00
    @qian88199496 那你这样写就是每次启动都会执行一遍,如果出现上线问题,重启什么的就是每次重启都执行,这样写是没问题,不过不利于分布式部署和突发情况
    qian88199496
        4
    qian88199496  
    OP
       2019-09-25 11:31:20 +08:00
    就是为了收集分布式部署, 服务器信息和应用信息,才想要这样设置
    fuxinya
        5
    fuxinya  
       2019-09-25 11:48:57 +08:00 via Android
    百度在线 cron 表达式
    k9990009
        6
    k9990009  
       2019-09-25 12:47:12 +08:00
    你每天都跑,程序里判断要不要执行,不就好了
    diyhi
        7
    diyhi  
       2019-09-25 13:02:58 +08:00
    这样?可以指定每周星期几
    rancc
        8
    rancc  
       2019-09-25 13:06:17 +08:00
    Expression Meaning
    "0 0 12 * * ?" Fire at 12pm (noon) every day
    "0 15 10 ? * *" Fire at 10:15am every day
    "0 15 10 * * ?" Fire at 10:15am every day
    "0 15 10 * * ? *" Fire at 10:15am every day
    "0 15 10 * * ? 2005" Fire at 10:15am every day during the year 2005
    "0 * 14 * * ?" Fire every minute starting at 2pm and ending at 2:59pm, every day
    "0 0/5 14 * * ?" Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
    "0 0/5 14,18 * * ?" Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
    "0 0-5 14 * * ?" Fire every minute starting at 2pm and ending at 2:05pm, every day
    "0 10,44 14 ? 3 WED" Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
    "0 15 10 ? * MON-FRI" Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
    "0 15 10 15 * ?" Fire at 10:15am on the 15th day of every month
    "0 15 10 L * ?" Fire at 10:15am on the last day of every month
    "0 15 10 ? * 6L" Fire at 10:15am on the last Friday of every month
    "0 15 10 ? * 6L" Fire at 10:15am on the last Friday of every month
    "0 15 10 ? * 6L 2002-2005" Fire at 10:15am on every last Friday of every month during the years 2002, 2003, 2004 and 2005
    "0 15 10 ? * 6#3" Fire at 10:15am on the third Friday of every month

    Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!
    rancc
        9
    rancc  
       2019-09-25 13:07:32 +08:00
    接上条,所以需要指定时间。哪一分那一秒都要指定
    zifangsky
        10
    zifangsky  
       2019-09-25 16:15:31 +08:00
    你找一个在线 在线 Cron 表达式 的工具验证一下不就明白了吗?
    比如: http://cron.qqe2.com/
    yesterdaysun
        11
    yesterdaysun  
       2019-09-25 16:23:47 +08:00
    就像上面说的, 你必须指定时分秒, 否则就是一秒钟运行一次, 你可以写个测试看一下执行时间就知道了, 网上有些模拟器和 Quartz 的语法不太一样, 而且 Quartz 语法不同版本也不一样, 跑测试最直接了:

    ```java
    @Test
    public void test() throws ParseException {
    CronTrigger cronTrigger = new CronTrigger("test", "test", "* * * */7 * ?");

    Date nextFireTime = new Date();
    for (int i = 0; i < 10; i++) {
    nextFireTime = cronTrigger.getFireTimeAfter(nextFireTime);
    String result = DateFormatUtils.format(nextFireTime, "yyyy-MM-dd HH:mm:ss");
    System.out.println(result);
    }
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2376 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.