多线程环境中使用MyBatis时避免出现没有token的问题
// 很重要,在多线程没有token 下面三行可以解决 mybatis方法报错
// 1. 通过当前的 WebUtil.getRequest() 获取Servlet请求的属性
ServletRequestAttributes servletRequestAttributes = new ServletRequestAttributes(WebUtil.getRequest());
// 2. 将获取到的Servlet请求属性设置为当前线程的请求属性
RequestContextHolder.setRequestAttributes(servletRequestAttributes);
// 3. 再次获取当前线程的请求属性
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// 4. 在一个新的线程中执行以下操作:
ThreadUtil.execute(() -> {
// 将上面获取到的请求属性再次设置为当前线程的请求属性
RequestContextHolder.setRequestAttributes(requestAttributes);
});
ServletRequestAttributes servletRequestAttributes = new ServletRequestAttributes(WebUtil.getRequest()); RequestContextHolder.setRequestAttributes(servletRequestAttributes); ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ThreadUtil.execute(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); ………业务代码……… }

浙公网安备 33010602011771号