我已经从一个propery文件中配置了CronExpression,但是这个属性文件是apache-deltaspike.properties,它位于.jar文件中。我需要从我的自定义配置文件中获取cron表达式:
import org.apache.deltaspike.core.api.config.PropertyFileConfig;
public class myOwnPropertyFileConfig implements PropertyFileConfig {
private static final long serialVersionUID = 1L;
@Override
public String getPropertyFileName() {
return "cfg/myOwnPropFile.properties";
}
@Override
public boolean isOptional() {
return false;
}
}
myOwnPropFile.properties
deltaspike_ordinal=500
property1=value1
property2=value2
QuartzJob=0 25 17 * * ?
工作:
@Scheduled(cronExpression = "{QuartzJob}")
public class MyQuartzJob implements Job {
//job code
}
设置此属性时一切顺利:QuartzJob = 0 25 17 * *? 在apache-deltaspike.properties中,但当我在我自己的属性文件中设置它时,我得到:
java.lang.IllegalStateException: No config-value found for config-key: QuartzJob
研究,我发现我的属性文件是在Quartz初始化之后加载的,这解释了原因。现在,我在Deltaspike文档中读到,可以随时在我的属性文件中使用deltaspike_ordinal来加载我的属性文件。所以我尝试了,但它似乎忽略了deltaspike_ordinal = 500,并且错误不断出现。
那么,有人知道如何解决这个问题吗? Deltaspike doc也谈到ConfigSource等等,但它不是那么清楚,也没有例子。
提前致谢!
答案 0 :(得分:1)
知道了。 关键是要研究PropertyFileConfig的javadoc:
- 通过java.util.ServiceLoader机制自动拾取如果您有EAR或,您需要在CDI期间配置的值 容器启动然后您也可以通过注册PropertyFileConfig java.util.ServiceLoader机制。没有这个配置 拾起两次需要注释你自己的PropertyFileConfig 使用org.apache.deltaspike.core.api.exclude.Exclude实现。
醇>ServiceLoader机制需要有一个文件 META-INF / services / org.apache.deltaspike.core.api.config.PropertyFileConfig包含您自己的完全限定类名 PropertyFileConfig实现类。
com.acme.my.own.SomeSpecialPropertyFileConfig实现 将如下所示:@Exclude public class SomeSpecialPropertyFileConfig implements PropertyFileConfig { public String getPropertyFileName() { return "myconfig/specialconfig.properties" } public boolean isOptional() { return false; } }
像魅力一样工作