Spring和Mybatis整合时无法读取properties的处理方案
2016-03-25 16:13
501 查看
转载地址:http://blog.sina.com.cn/s/blog_8e5354210101i03l.html
Spring配置信息(截取部分)
Xml代码 复制代码 收藏代码
此时,启动会报异常,${jdbc.driver}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:
修改为
原理:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题,同时还应注意在配置org.mybatis.spring.SqlSessionFactoryBean
这个Bean时,id不能为sqlSessionFactory,如果为这样的话会导致MapperScannerConigurer在bean定义加载时,加载PropertyPlaceholderConfigurer还没来得及替换定义中的变量
##数据库(mysql|mssql|oracle...) environment=mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/portal?useUnicode=true&characterEncoding=utf8 jdbc.user=root jdbc.password=root #初始化连接(根据实际访问量设置大小) jdbc.initialSize=10 #最大空闲连接(根据实际访问量设置大小) jdbc.maxIdle=50 #最小空闲连接(根据实际访问量设置大小) jdbc.minIdle=10 #最大连接数量(根据实际访问量设置大小) jdbc.maxActive=200
Spring配置信息(截取部分)
Xml代码 复制代码 收藏代码
<</span>context:property-placeholder location="classpath:config.properties" /> <</span>bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <</span>property name="driverClassName" value="${jdbc.driver}"/> <</span>property name="url" value="${jdbc.url}"/> <</span>property name="username" value="${jdbc.user}"/> <</span>property name="password" value="${jdbc.password}"/> <</span>property name="initialSize" value="${jdbc.initialSize}"/> <</span>property name="maxIdle" value="${jdbc.maxIdle}"/> <</span>property name="minIdle" value="${jdbc.minIdle}"/> <</span>property name="maxActive" value="${jdbc.maxActive}"/> <</span>property name="removeAbandoned" value="true"/> <</span>property name="removeAbandonedTimeout" value="120"/> <</span>property name="maxWait" value="3000"/> </</span>bean> <</span>bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <</span>property name="dataSource" ref="dataSource"/> <</span>property name="configLocation" value="classpath:mybatis-config.xml"/> <</span>property name="mapperLocations" value="classpath*:com.anly.portal.*.mapper/*Mapper.xml" /> </</span>bean> <</span>bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <</span>property name="basePackage" value="com.anly.portal.*.mapper"/> <</span>property name="sqlSessionFactory" ref="sqlSessionFactory"/> </</span>bean>
此时,启动会报异常,${jdbc.driver}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:
修改为
原理:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题,同时还应注意在配置org.mybatis.spring.SqlSessionFactoryBean
这个Bean时,id不能为sqlSessionFactory,如果为这样的话会导致MapperScannerConigurer在bean定义加载时,加载PropertyPlaceholderConfigurer还没来得及替换定义中的变量
相关文章推荐
- 做一个合格的程序猿之浅析Spring AOP源码(十七) Spring AOP开发大作战
- Rxjava原理探索:切换线程,变换
- java中的url 编码与解码
- eclipse转Android studio遇到的那些坑
- Java 线程池
- 使用springmvc注解后404错误
- JAVA选项详解(长期更新)
- 码农小汪-struts2学习4-struts.xml 常用配置解析
- java对象转换String类型
- java中的自增过程不是原子性操作
- Java中由substring方法引发的内存泄漏
- 使用java.nio类库实现的Socket
- thinking in java 笔记4
- Spring对Hibernate事务管理
- 16、java代码注释规范
- Java GC 及HBase RegionServer GC调优
- eclipse新建web项目运行时出现The requested resource is not available异常
- 《Java 2 实用教程》读书笔记(四)4.4
- Java Web SSH框架总是无法写入无法读取Cookie
- 照片EXIF信息的读取和改写的JAVA实现