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。
代码如下:





2.将sqlSessionFactory改为sqlSessionFactoryBeanName
代码如下:


环境配置

maven配置


org.mybatis
mybatis
3.2.7


org.mybatis
mybatis-spring
1.2.2



org.springframework
spring-core
4.1.4.RELEASE

参考

参考oschina上的解决方法

spring引入properties中的变量

通过配置


<context:property-placeholder ignore-unresolvable="true" location="classpath:application.properties" />

posted @ 2015-01-22 17:21  kaiyuan_ky  阅读(3445)  评论(0)    收藏  举报