#yyds干货盘点# mybatis源码解读(executor包(错误上下文))

欠伸展肢体,吟咏心自愉。这篇文章主要讲述#yyds干货盘点# mybatis源码解读:executor包(错误上下文)相关的知识,希望能为你提供帮助。
  mybatis源码解读:executor包(错误上下文)
?ErrorContext类是一个错误上下文,能够提前将一些背景信息保存下来。这样在真正发生错误时,便能将这些背景信息提供处理,进而给我们的错误排查带来便利。

public class ErrorContext
// 获得当前操作系统的换行符
private static final String LINE_SEPARATOR = System.getProperty("line.separator","\\n");

// 将自身存储进ThreadLocal,从而进行线程间的隔离
private static final ThreadLocal< ErrorContext> LOCAL = new ThreadLocal< > ();

// 存储上一版本的自身,从而组成错误链
private ErrorContext stored;

// 下面几条为错误的详细信息,可以写入一项或者多项
private String resource;
private String activity;
private String object;
private String message;
private String sql;
private Throwable cause;

private ErrorContext()


/**
* 从ThreadLocal取出已经实例化的ErrorContext,或者实例化一个ErrorContext放入ThreadLocal
* @return ErrorContext实例
*/
public static ErrorContext instance()
ErrorContext context = LOCAL.get();
if (context == null)
context = new ErrorContext();
LOCAL.set(context);

return context;


/**
* 创建一个包装了原有ErrorContext的新ErrorContext
* @return 新的ErrorContext
*/
public ErrorContext store()
ErrorContext newContext = new ErrorContext();
newContext.stored = this;
LOCAL.set(newContext);
return LOCAL.get();


/**
* 剥离出当前ErrorContext的内部ErrorContext
* @return 剥离出的ErrorContext对象
*/
public ErrorContext recall()
if (stored != null)
LOCAL.set(stored);
stored = null;

return LOCAL.get();


【#yyds干货盘点# mybatis源码解读(executor包(错误上下文))】ErrorContext类实现了单例模式,而它的单例是绑定到ThreadLocal上的。这保证了每个线程都有唯一的一个错误上下文ErrorContext。ErrorContext类有一种包装机制,即每个ErrorContext对象内还可以保证一个ErrorContext对象,这样错误上下文就可以组成一条错误链。

    推荐阅读