在我的应用程序上下文的顶部,我声明了一个 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 初始化?有没有办法确保 PropertyPlaceholderConfigurer 在所有其他 bean 之前加载?
最佳答案
事实证明,我定义的 bean 之一是引用 sqlSessionFactory 的 mybatis 的 MapperScannerConfigurer。
如果 MapperScannerConfigurer 使用已弃用的 bean 属性进行初始化,则它可以在任何 PropertyPlaceholderConfigurer 之前进行初始化
要纠正该行为,必须使用不同的 bean 属性引用 sqlSessionFactory。
参见this related post了解更多详情
关于java - PropertyPlaceholderConfigurers 在参数化 DataSource bean 之后加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923979/