在使用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;
}
};
未经允许不得转载:Dram乘风博客 » springboot aop切面编程 ThreadLocal空指针异常
来自X市的用户(2019-01-06)
评论暂不开放 ...