3

我想标题是不言自明的。我有工作:

import org.apache.deltaspike.scheduler.api.Scheduled;
import org.quartz.Job;

@Scheduled(cronExpression = "0 0/1 * * * ?")
public class JobA implements Job {
  //job code
}

编码为每分钟运行一次。我想从外部设置该 cron 表达式,即配置文件。我正在使用 Deltaspike,我找不到实现它的方法。我可能正在考虑一个类 JobDispatcher,从哪里创建作业并将 cron 表达式设置为它,但我在 DeltaSpike 文档中看不到任何线索

提前致谢!

4

2 回答 2

1

使 Cron 表达式成为私有的最终静态常量,从配置文件派生其值并在注释中使用它。

于 2015-03-20T20:44:34.030 回答
1

好吧,我最终还是使用了 Quartz,通过一个 JobDispatch.java 来设置调度程序,因此,正如 Quartz 规范所述,使用 Quartz 中的所有库而不是 Deltaspike 调度程序模块。到目前为止一切顺利,我认为我完全独立于 deltaspike-scheduler-module-api-1.2.1 和 deltaspike-scheduler-module-impl-1.2.1,但事实是我不是。一旦一切正常,我决定清理一下并摆脱这两个库。然后我意识到我的构建路径中有它们,所以我先从那里删除它们,最后从磁盘中删除它们。令我惊讶的是,当我再次尝试运行我的应用程序时,出现了一些异常,实际上是 NullPointerExceptions,来自 @Inject 变量。我没有对此进行更深入的研究,但我让这些库存在于构建路径中,因为它以这种方式正常工作。

我的想法是,在某种程度上,这些库通过作业使 CDI 保持活力,无论所有 cronjobs 内容是否仅取自 Quartz 库。

如果有人可以在这里有所启发,欢迎。

谢谢!

2016 年 4 月更新

Deltaspike 1.6 现在支持这种功能: 可配置的 CRON 表达式

更新 2 - 2016 年 4 月

对于 Quartz cron 表达式,配置不是那么简单,请查看容器启动时的配置以获取更多信息

于 2015-04-28T20:14:12.610 回答