来自自定义属性文件

时间:2016-04-21 21:07:32

标签: java properties quartz-scheduler cronexpression deltaspike

我已经从一个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等等,但它不是那么清楚,也没有例子。

提前致谢!

1 个答案:

答案 0 :(得分:1)

知道了。 关键是要研究PropertyFileConfig的javadoc:

  
      
  1. 通过java.util.ServiceLoader机制自动拾取如果您有EAR或,您需要在CDI期间配置的值   容器启动然后您也可以通过注册PropertyFileConfig   java.util.ServiceLoader机制。没有这个配置   拾起两次需要注释你自己的PropertyFileConfig   使用org.apache.deltaspike.core.api.exclude.Exclude实现。
  2.         

    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;
          }
      }
    

像魅力一样工作