欠伸展肢体,吟咏心自愉。这篇文章主要讲述#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对象,这样错误上下文就可以组成一条错误链。
推荐阅读
- #yyds干货盘点# 京东二面,Redis为什么这么快()
- #yyds干货盘点# HashMap的4种遍历方式
- #yyds干货盘点#spring-cloud-kubernetes与k8s的configmap
- #yyds干货盘点# Linux小项目-数码相册设计
- #过年不停更#HarmonyOS-JAVA之手把手教你绘制冰墩墩
- python测试webservice接口
- pycharm 快捷键
- python开启httpserver服务在自动化测试中的一个小运用
- wireshark配合jmeter测试webservice接口