Hybris在月底前天执行x个Cron工作

时间:2019-01-03 13:01:53

标签: cron hybris

我想在Hybris中创建一个可以在月底前运行5天的cron作业。我正在使用

  

0 23 22-31 * * [$(date -d + 1day +%d)-eq 1]

hybris cron job impex配置中的等效设置。

2 个答案:

答案 0 :(得分:2)

hybris使用Quartz 2,如documentation中所示。

来自Quartz 2 documentation

  

“月”和“周”字段中允许使用“ L”字符。该字符是“ last”的简写,但在两个字段中每个都有不同的含义。例如,“月”字段中的值“ L”表示“月的最后一天”,即非-年的1月31日,2月28日。[...] 您还可以指定与该月最后一天的偏移量,例如“ L-3”,这表示日历月的倒数第三天。使用“ L”选项时,不要指定列表或值的范围,这一点很重要,因为这样会导致结果混乱/意外。

因此您可以使用该0 0 0 L-5 * ?


注意:在较早的hybris版本(v4)上,我不确定Quartz 2是否可用。对于Quartz 1,您不能使用L-x模式。 如果您想在月底前精确5天,则应创建3个触发器。

0 0 20 26 1,3,5,7,8,10,12 ? * -> the 26th at 20h for all 31 days month

0 0 20 25 4,6,9,11 ? *  -> the 25th at 20h for all 30 days month

0 0 20 23 2 ? * -> the 23rd at 20h for february, this is actually a corner case because you may have different day for february...

还有其他解决方案,但是要复杂得多。

您可以在首次运行时设置触发器。然后,在您的作业中,您可以访问LocaleDate对象以确定该作业下次触发。最后,使用Java代码或impex创建+导入来更新cronjob的触发器。

答案 1 :(得分:1)

我发现使用石英的更好解决方案

0 0 0 L-5 * ? *

ref