spring和springmvc的配置文件整合
spring和springmvc的配置文件整合原创 2016年05月11日 16:57:084650spring和springmvc如何集成这里就不多做介绍了,本人在集成过程中,发现一个很严重的“小问题”。在springmvc的controller中,是可以@Autowire任意的bean的,这是因为他们的容器是“共享的”,但是某些属性,例如jdbc的配置属
spring和springmvc的配置文件整合
spring和springmvc如何集成这里就不多做介绍了,本人在集成过程中,发现一个很严重的“小问题”。
在springmvc的controller中,是可以@Autowire任意的bean的,这是因为他们的容器是“共享的”,但是某些属性,例如jdbc的配置属性,在controller中是无法@到的,根本原因还是springmvc和spring他们的上下文是伪共享。
根据UCM的思想,任意属性在任何地方都是可以被@到的,那如何在springmvc中去@某个配置属性呢。
先看方法一:
就是在springmvc和spring的xml配置文件中都把属性文件引入一遍,这样springmvc和spirng就是各用个的,如果后期有修改,两个地方都需要修改。
springcontext.xml中加入:
- <context:property-placeholderlocationcontext:property-placeholderlocation="classpath:/config/jdbc.properties" />
springmvc.xml中加入:
- <context:property-placeholderlocationcontext:property-placeholderlocation="classpath:/config/jdbc.properties" />
在代码中,可以这样@需要的属性配置
- @Value("${jdbc.username}")
- private Stringusername;
此法虽好,但是同样的代码写两份,总是不够完美。
其实若想只加载一份就在两个地方使用,那就需要将配置文件的加载分成两步来操作。在spring中,PropertiesFactoryBean可以将多个properties文件加载为一个bean(本质上时一个hashtable),而< context:property-placeholder/> 又支持引用某个配置bean,因此可以采取如下方法来加载properties文件。
且看方法二:
在springcontext.xml中加入
- <span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"></span><pre name="code" class="html"><!-- 配置文件加载器 -->
- <beanidbeanid="applicationProperties"
- class="org.springframework.beans.factory.config.PropertiesFactoryBean">
- <propertynamepropertyname="ignoreResourceNotFound" value="true" />
- <propertynamepropertyname="locations">
- <list>
- <value>classpath:/config-base/*.properties</value>
- <value>classpath:/config/*.properties</value>
- </list>
- </property>
- </bean>
- <!-- 引用配置文件加载器,并使支持${}的形式 -->
- <context:property-placeholderproperties-refcontext:property-placeholderproperties-ref="applicationProperties" />
springmvc.xml中加入:
- <!-- 引用配置文件加载器,并使支持${}的形式 -->
- <context:property-placeholderproperties-refcontext:property-placeholderproperties-ref="applicationProperties" />
这样就可以在任何controller或service中@我们需要的属性了。
注:
1. <context:property-placeholder />的实现类是PropertyPlaceholderConfigurer,而且只有配置了<context:property-placeholder />或PropertyPlaceholderConfigurer这个类,spring才能支持@Value("${}")这种方式注入属性
2.spring或springmvc上下文中,只允许存在一个<context:property-placeholder />,配置多个的话,只有第一个或生效(当然可以通过order更改加载顺序,但最终还是只有一个生效),因此若想加载多个配置文件的话,可以使用通配符*等或者用逗号隔开多个路径,例如这样配置
- <util:properties id="jdbcProperties"location="classpath:/config/*.properties,classpath:/config2/*.properties" />
更多推荐
所有评论(0)