Spring使用CLASSPATH中的属性文件忽略当前目录中的属性文件

时间:2015-10-14 16:50:19

标签: java spring

我将Spring属性文件定义为:

<bean
    class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="locations">
        <list>
            <value>lanchecker.properties</value>
        </list>
    </property>
</bean>

根据http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html中的23.3:

  

SpringApplication将从以下位置的application.properties文件加载属性,并将它们添加到Spring环境中:

     

当前目录的A / config子目录。

     

当前目录

     

classpath / config包

     

类路径根

     

列表按优先顺序排列(在列表中较高位置定义的属性会覆盖在较低位置定义的属性)。

在开发期间,此文件驻留在CLASSPATH,位于/ src / main / resources,并且可以正常解析。打包后我在当前目录中提供了另一个,但它被忽略了,CLASSPATH中的那个仍在使用。

我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

这似乎有效:

<bean
    class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:lanchecker.properties</value>
            <value>file:${user.dir}/lanchecker.properties</value>   <!-- file values will override classpath if exists -->
        </list>
    </property>
</bean>

如果两者都存在,它将首先读取类路径上的资源,然后用文件中的任何内容替换那里的值。

如果两者都不存在,那么在稍后阶段使用属性值时,它们就会成为一个讨厌的追溯。虽然有一些INFO日志消息可以帮助解决这个问题。不愉快,但它是我今天能够想到的最好的