【问题标题】:Can not load property file in spring-context.xml. Property file Path is given as a placeholder in dev.properties无法在 spring-context.xml 中加载属性文件。属性文件路径在 dev.properties 中作为占位符给出
【发布时间】:2017-01-24 08:24:28
【问题描述】:

我在 spring-context.xml 中加载属性文件,我正在给 外部属性文件位置 ${spring.profiles.active}.properties 位于类路径中,并在 spring-context.xml 中将该位置用作占位符。我的 spring-context.xml 是:

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="searchSystemEnvironment" value="true" />
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="locations" ref="propertyConfigurerFiles" />
    </bean>
    <bean id="propertyConfigurerFiles" class="java.util.ArrayList">
    <constructor-arg>
    <list>
    <value>/WEB-INF/properties/common.properties</value>

    <!--In Developemnet Enviroenment it will be dev.properties-->
    <value>/WEB-INF/properties/${spring.profiles.active}.properties</value> 

    <!--External Property File Location as a Placeholder-->
    <value>${app.config.batch.location}</value>

    </list>
    </constructor-arg>
    </bean>

而我的 dev.properties 是:

    app.config.batch.location=E:/project/properties/config.properties

我的问题是 ${app.config.batch.location} 占位符不是 在 spring-context.xml 中解决并尝试加载文件 ${app.config.batch.location} 代替 E:/project/properties/config.properties.

我希望我能很好地解释这个问题。请帮忙!

提前致谢!!!

【问题讨论】:

    标签: spring properties property-placeholder


    【解决方案1】:

    您需要创建 PropertyPlaceHolderConfigurer 类的 bean。 不仅仅是一些 ArrayList bean。为什么你认为你需要这个 ArrayList bean?

    【讨论】:

    • 嗨 @Юрий Плевако 我需要 ArrayList bean 供参考。我修改了我的问题并发布了我的完整 spring-context.xml。
    • 因此,您需要在创建 ArrayList bean 时实例化 PropertyPlaceHolderConfigurer,因为您在 ArrayList bean 配置中使用占位符,而您没有它。可能的方法是在构建系统处理资源时使用一些占位符
    • 是的。我知道但我无法找到实现它的方法。如果你能提出一些建议,那将会很有帮助。谢谢
    • 例如使用 gradle 这将是这样的:processResources { filesMatching('*.properties') { filter(ReplaceTokens, tokens: [MYTOKEN: 'mytokenvalue']) } } 在属性文件中你想添加 @MYTOKEN@ 占位符
    【解决方案2】:

    看来您正在使用弹簧配置文件,而不是搞乱初始化时间属性值绑定,您可以做的是...... 1)读取属性文件(配置文件的) /WEB-INF/properties/${spring.profiles.active}.properties 2)创建一个可以读取这些属性值的java类。 (不要忘记使用弹簧型材接口类) 3) 当您尝试读取其位置嵌入在属性文件中的属性文件时(步骤 1),在步骤 2 中创建的对象将为键 &lt;value&gt;${app.config.batch.location}&lt;/value&gt; 提供值 现在您可以使用可用的文件阅读器类加载此属性文件。 4) 创建Properties 对象并访问其中的值。

    注意::如果您的任何 bean 初始化依赖于在第 4 步读取的键值,请手动进行初始化或创建您的 ***custom 类(servlet),该类(servlet)在任何其他类(甚至 spring 的 DispactherServlet)之前加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2014-03-10
      • 2012-08-03
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多