MyBatis无限输出日志
最近在項目中使用mybatis與spring集成,由于項目使用maven分模塊打包,經常遇到mybatis mapper少配置子模塊或者maven pom中忘記引用子模塊導致的mybatis加載不到dao或mapper啟動不起來,直接卡死。其實這是mybatis一個bug,在sqlSessionFactory加載的時候沒有找到mapper或者dao,mybatis沒有把異常拋出。
解決方法就是自己寫個sqlSessionFactory拋出異常,替代org.mybatis.spring.SqlSessionFactoryBean。新建一個FixedSqlSessionFactory,集成SqlSessionFactoryBean重寫buildSqlSessionFactory(),捕捉異常并且拋出。
簡單點的方法就是在org.mybatis.spring.SqlSessionFactoryBean類中buildSqlSessionFactory方法中,如下位置打一個斷點進行調試,查看控制臺的e變量,不知道啥原因var20監視不了,只能看e,拷貝出來就可以看到具體出錯的原因了
try {XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperLocation.getInputStream(), configuration, mapperLocation.toString(), configuration.getSqlFragments());xmlMapperBuilder.parse();} catch (Exception var20) {throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", var20);} finally {ErrorContext.instance().reset();}?
如果自定義sql工廠進行捕捉,可以如下實現需要注意的是,一定要使用
import org.mybatis.spring.SqlSessionFactoryBean; public class FixedSqlSessionFactory extends SqlSessionFactoryBean{ @Override protected SqlSessionFactory buildSqlSessionFactory() throws IOException { try { return super.buildSqlSessionFactory(); }catch (Exception e){ e.printStackTrace(); }finally { ErrorContext.instance().reset(); } return null; } }而在spring的sqlSessionFactory配置中,class要寫我們的FixedSqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-mapper-config.xml"/> </bean>改寫完成后,再重啟項目,就可以看到由于沒引入mapper產生的異常了,這里拋出的異常可能不只因為mapper沒引入,也有其他原因,具體錯誤具體解決。
轉載于:https://www.cnblogs.com/javabg/p/8269705.html
總結
以上是生活随笔為你收集整理的MyBatis无限输出日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】五、谈扩展方法的理解
- 下一篇: 虚拟机三种联网方式