0

在我的应用程序上下文的顶部,我声明了一个 PropertyPlaceholderConfigurer

...
<context:annotation-config/>

<context:property-placeholder location="classpath:foo.properties"/>
...

稍后,我声明了一个由该属性文件中的属性参数化的数据源 bean

<bean id="someDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
    <property name="connectionCachingEnabled" value="true"/>
    <property name="URL" value="${database.url}"/>
    <property name="user" value="${database.user}"/>
    <property name="password" value="${database.password}"/>
</bean>

在部署期间,我注意到在初始化 PropertyPlaceholderConfigurer 之前创建了数据源 bean 并尝试建立连接。这导致我的数据源参数化没有被填充。

知道为什么会发生这种情况吗?

bean 是否有特定的创建顺序?某些 bean 是否总是在其他 bean 之前初始化?有没有办法确保在所有其他 bean 之前加载 PropertyPlaceholderConfigurer?

4

2 回答 2

1

事实证明,我定义的其中一个 bean 是 mybatis 的 MapperScannerConfigurer,它引用了一个 sqlSessionFactory。

MapperScannerConfigurer 可以在任何 PropertyPlaceholderConfigurer 之前初始化,如果它使用不推荐使用的 bean 属性进行初始化

要纠正该行为,必须使用不同的 bean 属性来引用 sqlSessionFactory。

有关更多详细信息,请参阅此相关帖子

于 2015-06-19T13:03:35.437 回答
0

你需要向前<context:property-placeholder location="classpath:foo.properties"/>移动<context:annotation-config/>

<context:property-placeholder location="classpath:foo.properties"/> <context:annotation-config/>

于 2015-06-18T19:41:40.533 回答