spring配置加载多个properties文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring配置加载多个properties文件相关的知识,希望对你有一定的参考价值。

(一)
首先,我们要先在spring配置文件中。定义一个专门读取properties文件的类.
例:

1 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
2     <property name="locations">
3     <list>
4         <value>classpath*:jdbc.properties</value>
5         <!--要是有多个配置文件,只需在这里继续添加即可 -->
6     </list>
7     </property>
8 </bean>        

 



这里为什么用locations(还有一个location)
一般来说,我们的项目里面配置文件可能存在多个。
就算是只有一个,那将来新添加的话,只需在下面再加一个value标签即可,

而不必再重新改动太多。

(二) 使用 spring中 context:property-placeholder 
例: 

<context:property-placeholder location="classpath:data/mybatis.properties" /> 

但是不能加载多个properties文件,Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的 Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceholderConfigurer替代 PropertyPlaceholderConfigurer了)。

换句话说,即Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(或),其余的会被Spring忽略掉(其实Spring如果提供一个警告就好了)。

拿上来的例子来说,如果A和B模块是单独运行的,由于Spring容器都只有一个PropertyPlaceholderConfigurer, 因此属性文件会被正常加载并替换掉。如果A和B两模块集成后运行,Spring容器中就有两个 PropertyPlaceholderConfigurer Bean了,这时就看谁先谁后了, 先的保留,后的忽略!因此,只加载到了一个属性文件,因而造成无法正确进行属性替换的问题.

解决方法:

1     <!-- 加载所有配置文件 -->
2     <context:property-placeholder location="classpath*:data/*.properties"/>
3     <!-- 还可以是下面方式,加载多个目录中的 -->
4     <context:property-placeholder location="classpath:*.properties,classpath:*/*.properties" /> 

 




以上是关于spring配置加载多个properties文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC多个properties 根据VM options参数加载不同的properties 文件

Spring项目中Properties不能加载多个的问题

Spring引入配置文件

java中用Properties类加载配置文件

Spring加载Properties配置文件的三种方式

spring加载配置文件