在使用spring mybatis的時候配置數據源dataSource,為了修改方便,新建了一個application.properties其中保存了jdbc.url,jdbc.username等信息。這樣在dataSource定義的時候 可以直接使用jdbc.url這些變量。使用方式為 ${jdbc.url},可是配置完成之后,啟動程序報錯,報錯原因是application中的jdbc.url變量沒有注入到datasource中。
問題原因在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 進行自動掃描的時候,設置了sqlsessionFactory 的話,可能會導致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}這樣之類的表達式,將無法獲取到properties文件里的內容。
導致這一原因是因為,MapperScannerConigurer實際是在解析加載bean定義階段的,這個時候要是設置sqlSessionFactory的話,會導致提前初始化一些類,這個時候,PropertyPlaceholderConfigurer還沒來得及替換定義中的變量,導致把表達式當作字符串復制了。
解決方法1.MapperScannerConigurer如果設置了sqlSessionFactory屬性,則注釋掉該屬性,并且保證sqlSessionFactory的id為sqlSessionFactory。代碼如下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mybatis_test.client" /><property name="markerInterface" value="mybatis_test.client.SuperMapper" /><!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> --></bean>2.將sqlSessionFactory改為sqlSessionFactoryBeanName代碼如下:
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />環境配置maven配置
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version></dependency><!-- spring 核心4.1.4 --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version></dependency>參考參考oschina上的解決方法
spring引入properties中的變量通過配置
<!-- 當需要多個配置文件的時候,將ignore-unresolvable設置為"true"- --><context:property-placeholder ignore-unresolvable="true" location="classpath:application.properties" />新聞熱點
疑難解答