2016-04-21 57 views
0

我已经实现了从propery文件配置CronExpression,但是这个属性文件是apache-deltaspike.properties,它位于.jar文件中。我需要cron表达式从我的自定义配置文件:Deltaspike + Quartz + CronExcel自定义属性文件

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 

研究,我发现我的属性文件是由石英初始化以后马上装载,并解释了原因。现在,我阅读了Deltaspike文档,可以在我的属性文件中使用deltaspike_ordinal来随时加载我的属性文件。所以我试了一下,但似乎忽略了deltaspike_ordinal = 500,并且错误不断出现。

那么,有人知道如何解决这个问题吗? Deltaspike doc也提到了ConfigSource等,但它并不是很清楚,也没有例子。

在此先感谢!

回答

1

明白了。 的关键是寻找到PropertyFileConfig的的Javadoc:

  • 经由java.util.ServiceLoader机构自动拾取如果你有耳或需要已经配置值在CDI 容器启动那么你也可以通过 注册PropertyFileConfig的java.util.ServiceLoader机制。要没有这个配置 拿起两次它需要用org.apache.deltaspike.core.api.exclude.Exclude注释你自己的PropertyFileConfig 实现。
  • 的的ServiceLoader机制需要有一个文件 META-INF /服务包含自己 PropertyFileConfig实现类的完全限定类名称/ org.apache.deltaspike.core.api.config.PropertyFileConfig。
    com.acme.my.own.SomeSpecialPropertyFileConfig实施 将如下所示:

    @Exclude 
        public class SomeSpecialPropertyFileConfig implements PropertyFileConfig  { 
         public String getPropertyFileName() { 
          return "myconfig/specialconfig.properties" 
         } 
         public boolean isOptional() { 
          return false; 
         } 
        } 
    

    工作就像一个魅力