#yyds干货盘点# mybatis源码解读:executor包(错误上下文)
Posted 灰太狼_cxh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#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();
ErrorContext类实现了单例模式,而它的单例是绑定到ThreadLocal上的。这保证了每个线程都有唯一的一个错误上下文ErrorContext。ErrorContext类有一种包装机制,即每个ErrorContext对象内还可以保证一个ErrorContext对象,这样错误上下文就可以组成一条错误链。
以上是关于#yyds干货盘点# mybatis源码解读:executor包(错误上下文)的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# mybatis源码解读:executor包(语句处理功能)
#yyds干货盘点# mybatis源码解读:cache包(缓存基本功能)
#yyds干货盘点# mybatis源码解读:cache包(缓存机制功能)
#yyds干货盘点# mybatis源码解读:executor包(错误上下文)