在spring的注解 @RequestMapping 之下可以直接获取 HttpServletRequest 来获得诸如request header等重要的请求信息:
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
private static final String HEADER = "app-version";
@RequestMapping(value = "/async", method = RequestMethod.GET)
public void test(HttpServletRequest request) {
request.getHeader(HEADER);
}
}
往往,这些重要的信息也会在异步线程中被使用到。于是,一个很自然的想法是,那不如直接把这里获取到的request当做参数传到其它spawn出的子线程里,比如:
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
private static final String HEADER = "app-version";
@RequestMapping(value = "/async", method = RequestMethod.GET)
public void test(HttpServletRequest request) {
log.info("Main thread: " + request.getHeader(HEADER));
new Thread(() -> {
log.info("Child thread: " + request.getHeader(HEADER));
}).start();
}
}
在header中设置"app-version"为1.0.1后发送 /test/async 请求,可以看到结果:
Main thread: 1.0.1
Child thread: 1.0.1
但是&#