Mybatis源码学习 - ExceptionContext

原创
2018/08/03 14:00
阅读数 28

ExeceptionContext 顾名思义 就是 exception 的上下文。 用来保存当前线程执行的一些重要信息 。 内部使用ThreadLocal实现。 

当线程执行出现错误时,就可以将ThreadContext 保存的信息做成错误日志(ExceptionFactory)。

 

涉及的类 - ErrorContext ,  ExceptionFactory , SqlSessionFactoryBuilder , BaseExecutor  。 

public int update(MappedStatement ms, Object parameter) throws SQLException {
    ErrorContext.instance().resource(ms.getResource()).activity("executing an update").object(ms.getId());
    if (closed) throw new ExecutorException("Executor was closed.");
    clearLocalCache();
    return doUpdate(ms, parameter);
  }

 

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        inputStream.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }

 

public static RuntimeException wrapException(String message, Exception e) {
    return new PersistenceException(ErrorContext.instance().message(message).cause(e).toString(), e);
  }

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部