如何保证Spring bean的顺序?属性占位符问题

2023-12-24

我有一个非常简单且小型的服务,我正在使用 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(使用前将#替换为@)

如何保证Spring bean的顺序?属性占位符问题 的相关文章

随机推荐