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

时间:2015-03-20 19:05:17

标签: java cron quartz-scheduler cronexpression deltaspike

我想这个标题非常自我解释。我找到了一份工作:

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文档中的线索

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

我的想法是,从某些方面来说,无论是否所有cronjobs内容都来自Quartz libs,那些libs都会让CDI保持活着状态。

如果有人能在这里阐明,欢迎。

谢谢!

更新4/2016

Deltaspike 1.6现在支持这种功能: Configurable CRON expressions

更新2 - 4/2016

对于Quartz cron表达式,配置并不那么简单,请查看Configuration at container startup time以获取更多信息