形成這種狀況的緣由是由於讀取配置文件操做早於Propertyplaceholderconfigurer加載配置文件,致使讀取配置文件時直接讀取了硬編碼的鍵名,而非鍵值spring
在使用mybatis的自動掃描注入時致使這種狀況是由於使用了sqlSessionFactoryBean,例如:sql
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- mapper接口所在位置 --> <property name="basePackage" value="com.yumei.batchpay.common.dal.daointerface" /> <property name="sqlSessionFactoryBean" ref="sqlSessionFactory" /> </bean>
在這種狀況下,spring會提早去裝配sqlSessionFactory,從而致使數據庫的配置文件在Propertyplaceholderconfigurer還沒加載的時候就已經被讀取了,因此會鏈接失敗。數據庫
因此須要使用另一種配置sqlSessionFactoryBean的方式。markdown
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- mapper接口所在位置 --> <property name="basePackage" value="com.yumei.batchpay.common.dal.daointerface" /> <!-- 注意此處爲sqlSessionFactoryBeanName而不是sqlSessionFactoryBean --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean>
可是有時候發現就算這樣寫仍是會失效,緣由是由於在applicationContext中配置了自動注入,因此就算沒有配置sqlSessionFactoryBean,也沒自動注入了,固然也就提早被裝配了。mybatis