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文件的主要内容,如果未能解决你的问题,请参考以下文章