java子线程解决获取主线程的request对象

问题描述

业务系统,多线程处理业务是提供性能方法之一,在使用中,我们会将某些数据存储在request中,传给后面的组件使用,不需要在方法中定义变量来传递,提高代码的美观可读性,我们使用request.setAttribute(“xxxx”, “xxxx”)方式传递参数,后面的组件或方法使用如下代码获取参数:

ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();

Object param = request.getAttribute(“xxxx”);

在主线程下这么写是没问题的,但是子线程下request 对象是空的,子线程不共享主线程的request对象

解决办法

在启动线程前,执行以下代码即可,子线程也可以共享主线程的request对象
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(sra, true);

示例

java子线程解决获取主线程的request对象_第1张图片

你可能感兴趣的:(线程池,java,spring)