spring mybatis解决application.properties注入变量问题

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

sPRing mybatis解决application.properties注入变量问题问题描述在使用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" />

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航