我有一个非常简单且小型的服务,我正在使用 spring。
为了配置数据库连接,我有一个 DataSource bean,并使用使用 .properties 文件加载的“datasource.properties”文件。
协议是 Spring 在读取属性文件之前初始化数据源 bean,这样,数据源 bean 就会尝试使用“${datasource.driver}”驱动程序。
如何保证在初始化数据源 bean 之前加载属性?
看下面一段代码:
<context:property-placeholder location="classpath:config/datasource.properties"/>
<import resource="classpath:spring/spring-*.xml"/>
<bean id="bdsDatasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${datasource.bds.driver}" />
<property name="jdbcUrl" value="${datasource.bds.url}" />
<property name="user" value="${datasource.bds.user}" />
<property name="password" value="${datasource.bds.password}" />
</bean>
if
-
property-placeholder
在相同的应用程序上下文中使用,并且
-
<import resource="classpath:spring/spring-*.xml"/>
没有自己的property-placeholder
覆盖 import 语句之前定义的,并且
-
datasource.properties
真的有一个datasource.bds.driver
then
bdsDatasource
's ${datasource.bds.driver}
应该可以毫无问题地解决。
In case
there is其他property-placeholder
覆盖之前定义的某个地方import
声明,这里有两件事可以尝试:
- 定义你的
property-placeholder
after进口声明:
<import resource="classpath:spring/spring-*.xml"/>
<context:property-placeholder location="classpath:config/datasource.properties"/>
<bean id="bdsDatasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${datasource.bds.driver}" />
<property name="jdbcUrl" value="${datasource.bds.url}" />
<property name="user" value="${datasource.bds.user}" />
<property name="password" value="${datasource.bds.password}" />
</bean>
- add an
order
归因于property-placeholder
:
<context:property-placeholder
location="classpath:config/datasource.properties"
order="0"/>
可能会覆盖几个的顺序property-placeholder
beans
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)