按评价排序 | 显示最新答案 | 回页面顶部共有10个答案 我要回答»
-
ruben 回答于 2011-11-19 21:38
我也遇到过这个问题,但不清楚是否和你的情况一样,不过导致的原因应该差不多。
==================================================
在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。
-
-
-
hyanqing 回答于 2012-03-06 20:10
引用来自“johnny!”的答案
我现在也遇到了这个问题,LZ你是注释掉什么就没问题的?就是这个org.mybatis.spring.mapper.MapperScannerConfigurer中配置的bean下有属性sqlSessionFactory,如果配置了,就去掉这个属性,变成如下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property value="com.hyq.showcase.mapper,com.hyq.common.core.mapper" name="basePackage"/>
</bean>
--- 共有 2 条评论 --- -
icanfly 回答于 2012-07-25 13:31
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
-
常育新 回答于 2012-11-09 22:41我这么配置也会出错!~
01<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">02<property name="configLocation"value="classpath:mybatis-config.xml"/>03<property name="dataSource"ref="dataSource"/>04</bean>0506<!-- mapper自动扫描 -->07<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">08<property name="basePackage"value="com.xxx.xxx"/>09<property name="annotationClass"value="org.springframework.stereotype.Repository"/>10</bean> -
常育新 回答于 2012-11-09 23:21
引用来自“icanfly”的答案
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
按照这个方法,解决问题了,多谢!~ -
-
xuwei 回答于 2012-11-23 21:41我的只要有org.mybatis.spring.mapper.MapperScannerConfigurer 就会报错,读取不了 dataSource的变量
01<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">02<propertyname="dataSource"ref="dataSource"/>03<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->04<propertyname="typeAliasesPackage"value="com.hzbank.erp.mybatis.entity"/>05<!-- 显式指定Mapper文件位置 -->06<propertyname="mapperLocations"value="classpath*:mybatis/TUserMapper.xml"/>07</bean>0809<!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口 -->10<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">11<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/>12<propertyname="basePackage"value="com.hzbank.erp.mybatis"/>13<propertyname="annotationClass"value="com.hzbank.erp.mybatis.interf.MyBatisRepository"/>1415</bean>
本文解决在使用Spring 3.0.6、MyBatis 3.0.6和MyBatis-Spring 1.0.2进行整合时,配置属性文件无法成功加载的问题。通过调整MyBatis-Spring中的配置,避免在自动扫描Mapper接口时提前初始化SQLSessionFactory,从而解决加载属性文件失败的异常。



2万+

被折叠的 条评论
为什么被折叠?



