使用外部属性文件
-
在配置文件里配置Bean是,有时需要在Bean的配置里混入系统部署的细节信息(例如:文件路径,数据源配置信息等)而这些部署细节实际上需要和Bean配置相分离
-
spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean配置的部分内容外移到属性文件中,可以在Bean配置文件里使用形式为${var}的变量PropertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性来替换变量
-
spring还允许在属性文件中使用${propName},以实现属性之间的相互引用
来看一个示例,有以下配置
我们添加了所支持的jar包后,配置了一个数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="root"></property>
<property name="password" value="178313"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
</bean>
获得bean后运行测试结果
得到结果,运行正常,说明配置没问题,但是一般不推荐这么做。此时我们应该引入外部配置文件信息
添加一个properties,实例如下
然后在配置文件里这样配置
<!-- 导入属性文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 使用外部化属性文件的属性 -->
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverClass" value="${driverclass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
</bean>
然后测试运行得到结果
这个时候在进行系统部署和更换底层数据库的时候,直接修改属性文件就可以,修改属性文件的成本比修改spring配置的文件的成本要低得多