Deltaspike 和 Quartz:如何从配置文件设置 cronExpressions

Deltaspike and Quartz: How to set cronExpressions from a config file

我猜这个标题相当self-explained。我有一份工作:

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,我找不到实现它的方法。我可能在考虑 class JobDispatcher,从哪里创建作业并为其设置 cron 表达式,但我在 DeltaSpike 文档中看不到任何线索

提前致谢!

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

好吧,我最终按原样使用了 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 现在支持这种功能: Configurable CRON expressions

更新 2 - 4/2016

对于 Quartz cron 表达式,配置不是那么简单,查看 Configuration at container startup time 了解更多信息