在我的应用程序上下文的顶部,我声明了一个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之前加载PropertyPlaceholderConfigurer?
答案 0 :(得分:1)
事实证明,我定义的一个bean是mybatis的MapperScannerConfigurer,它引用了一个sqlSessionFactory。
MapperScannerConfigurer可以在任何PropertyPlaceholderConfigurer之前初始化,如果它已使用不推荐的bean属性初始化
要纠正行为,必须使用不同的bean属性引用sqlSessionFactory。
有关详细信息,请参阅this related post
答案 1 :(得分:0)
您需要在<context:property-placeholder location="classpath:foo.properties"/>
<context:annotation-config/>
<context:property-placeholder location="classpath:foo.properties"/>
<context:annotation-config/>