项目启动时不报错也无法启动问题的解决

  公司来了新人,经常会出现项目启动的过程中卡住而使得项目无法启动,如下图所示:

   这个问题一般是因为公司的项目继承了 Spring 与 Mybatis,在使用了如下配置的情况下,当mapper.xml出现了sql书写问题或者sql 的id重复问题,并不会抛出异常,日志打印也就卡在了上图的情况。有经验的同事很容易找到问题,没有经验的新手没有日志打印,即使知道是mapper.xml中的原因,也很难定位问题。

   <!-- define the SqlSessionFactory -->
    <!--创建sqlsession 定义mappersu-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

  解决方式是手写一个继承自mybatis的SqlSessionFactoryBean的类,覆盖其buildSqlSessionFactory()方法,捕获异常并打印异常日志,替代SqlSessionFactoryBean。

  代码如下:

package com.bvdata.power.functions;

import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;

public class FixedSessionFactoryBean extends SqlSessionFactoryBean {
    @Override
    protected SqlSessionFactory buildSqlSessionFactory() {
        try {
            return super.buildSqlSessionFactory();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            ErrorContext.instance().reset();
        }
        return null;
    }
}
<bean id="sqlSessionFactory" class="com.bvdata.power.functions.FixedSessionFactoryBean">  

  重新启动之后即可看到之前日志打印停顿的地方打印出了异常日志。

   由打印出的异常我们知道了是DefectV2NegoTaskDownMapper.xml中的batchAddRelaDefect sql出了问题。

  再从具体的位置发现问题原因如下:

 

   原来是两条sql的id重复。

猜你喜欢

转载自www.cnblogs.com/guaniu2750/p/12391083.html