quartz 定时器周期设定

2019-09-25 11:12:17 +08:00
 qian88199496

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

1892 次点击
所在节点    程序员
11 条回复
airfling
2019-09-25 11:15:51 +08:00
那你为啥不直接直接设置为每周几执行一次
qian88199496
2019-09-25 11:17:10 +08:00
@airfling #1 因为想在启动的时候直接运行啊,相隔一周执行一次
airfling
2019-09-25 11:23:56 +08:00
@qian88199496 那你这样写就是每次启动都会执行一遍,如果出现上线问题,重启什么的就是每次重启都执行,这样写是没问题,不过不利于分布式部署和突发情况
qian88199496
2019-09-25 11:31:20 +08:00
就是为了收集分布式部署, 服务器信息和应用信息,才想要这样设置
fuxinya
2019-09-25 11:48:57 +08:00
百度在线 cron 表达式
k9990009
2019-09-25 12:47:12 +08:00
你每天都跑,程序里判断要不要执行,不就好了
diyhi
2019-09-25 13:02:58 +08:00
这样?可以指定每周星期几
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
2019-09-25 13:07:32 +08:00
接上条,所以需要指定时间。哪一分那一秒都要指定
zifangsky
2019-09-25 16:15:31 +08:00
你找一个在线 在线 Cron 表达式 的工具验证一下不就明白了吗?
比如: http://cron.qqe2.com/
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);
}
}
```

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

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

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

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

© 2021 V2EX