springboot aop切面编程 ThreadLocal空指针异常

在使用ThreadLocal类时,报空指针异常:

private static final ThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime");


应改为:
    private static final ThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime") {
    	/**
    	 * 由于过滤器filter的拦截是的没有直接访问preHandle方法,所以ThreadLocal没有set值,
    	 * 就直接访问afterCompletion从ThreadLocal中get值,导致ThreadLocal底层使用的map为空,
    	 * 执行initialValue方法并抛出NullPointException,根据jdk文档推荐做法
    	 * 解决方案:
    	 * 一般情况下不会抛空指针异常,但在个别项目中会存在被过滤器拦截后执行发生变化的问题,
    	 * 变化后不是先执行prehandle再执行aftercompletion,而是会反复执行aftercompletion
    	 * before 注解 和 after注解时,也一样会出现NullPointException异常
    	 */
    	protected Long initialValue() {
			long beginTime = System.currentTimeMillis();
			return beginTime;
		}
    };


相关推荐

评论 抢沙发

表情
  1. #1

    来自X市的用户(2019-01-06)
    评论暂不开放 ...

首页上一页12下一页尾页