MyBatis有一个非常头疼的问题,就是当Mapper XML写法定义错误的时候,系统起不来,但也不报错,始终卡到如下信息位置:
信息: Initializing Spring root WebApplicationContext
问题分析思路就不叙述了,直接说解决方法吧:
新建一个类,继承 org.mybatis.spring.SqlSessionFactoryBean 类,重载 buildSqlSessionFactory 方法,捕获 NestedIOException 异常,并打印异常,如下:
1 try { 2 return super.buildSqlSessionFactory(); 3 } catch (NestedIOException e) { 4 e.printStackTrace(); // XML 有错误时打印异常。 5 throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e); 6 } finally { 7 ErrorContext.instance().reset(); 8 }
然后修改 spring 配置文件 org.mybatis.spring.SqlSessionFactoryBean 替换为刚才新建的类。
这样,当MyBatis解析Mapper遇到错误的时候就能输出到控制台了。