package com.shhxzq.fin.lifeapp.biz.utils; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; /** * 交易监控工具类 * @author Gxx */ public class TransMonitorUtils { /** * 日志记录器 */ static Logger logger = BaseUuidLoggerUtils.getBaseUuidLogger(); /** * 通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值 * 使得同一个线程的resvMap是一样的,存放监控方法的备注字段 */ private static ThreadLocal> resvMap = new ThreadLocal>() { /** * 初始值 */ public Map initialValue() { return new HashMap<>(); } }; /** * 往ThreadLocal中MAP设置备注字段1 * @param className 类名 * @param methodName 方法名 * @param args 参数 * @param string 备注字段1 */ public synchronized static void setResv1(String className, String methodName, Object[] args, String string) { String methodRoute = getMethodRoute(className + "." + methodName, args); resvMap.get().put(methodRoute + ".resv1", string); } /** * 往ThreadLocal中MAP设置备注字段2 * @param className 类名 * @param methodName 方法名 * @param args 参数 * @param string 备注字段2 */ public synchronized static void setResv2(String className, String methodName, Object[] args, String string) { String methodRoute = getMethodRoute(className + "." + methodName, args); resvMap.get().put(methodRoute + ".resv2", string); } /** * 往ThreadLocal中MAP设置备注字段3 * @param className 类名 * @param methodName 方法名 * @param args 参数 * @param string 备注字段3 */ public synchronized static void setResv3(String className, String methodName, Object[] args, String string) { String methodRoute = getMethodRoute(className + "." + methodName, args); resvMap.get().put(methodRoute + ".resv3", string); } /** * 从ThreadLocal中MAP获取备注字段1 * @param string */ public synchronized static String getResv1(String methodRoute) { return resvMap.get().get(methodRoute + ".resv1"); } /** * 从ThreadLocal中MAP获取备注字段2 * @param string */ public synchronized static String getResv2(String methodRoute) { return resvMap.get().get(methodRoute + ".resv2"); } /** * 从ThreadLocal中MAP获取备注字段3 * @param string */ public synchronized static String getResv3(String methodRoute) { return resvMap.get().get(methodRoute + ".resv3"); } /** * 获取方法路径(包括参数类型) * @param targetName 类名+方法名 * @param args 参数数组 * @return */ public static String getMethodRoute(String targetName, Object[] args) { String methodRoute = targetName + "("; if(null != args) { for(int i=0;i 0) { methodRoute += ", "; } Object object = args[i]; String type = object.getClass().getTypeName(); methodRoute += type; } } methodRoute += ")"; return methodRoute; } }