java - Spring Webflux 是否在每个请求的单个线程中调用单个 HandlerFunction?
问题描述
考虑下面的代码片段 - 将简单的非线程安全的 HashMap 传递给SomeHandlerFunction
将在其他自动装配的 bean 中使用它的HashMap 是否安全SomeHandlerFunction
?
@Bean
RouterFunction<ServerResponse> request(SomeHandlerFunction handlerFunction) {
handlerFunction.setSimpleMapProperties(new HashMap());
return route(GET("/dummy"), handlerFunction);
}
@Service
class SomeHandlerFunction implements HandlerFunction {
@Autowired
List<AnotherBeans> anotherBeans;
Mono<T> handle(ServerRequest var1) {
// code...
}
}
我对 WebFlux 中的多线程模型有点了解,但是这个案例让我感到困惑。
解决方案
如果这HashMap
是可变的,那不是一个好主意——即使是 Spring MVC 也不行。你应该怎么做?这实际上取决于手头的用例。
如果您尝试设置本地内存缓存,则可以使用像 Caffeine 这样的库,或者简单地使用ConcurrentMapCache
.
如果您想与该 bean 共享配置密钥,您可以使用Collections.unmodifiableMap
甚至更好地包装该映射,使其成为适当的不可变 POJO。
如果这是为了携带与正在处理的请求相关联的临时数据,则应改为使用请求属性或 Reactor Context。
推荐阅读
- jquery - 将字符串添加到jquery中的变量会多次添加
- html - 为什么即使我为它们设置了宽度,flexbox 的子级仍会缩小?
- css - 具有透明度的CSS渐变边框
- javascript - 使用位置哈希在 javascript 函数之间传递参数
- python - 将消息从 python2.7 记录到 python3.9,反之亦然
- jdbc - 如何在 JDBC Kafka 源连接器中设置动态模式名称
- python - Python InvestPy 包获取“Nifty50”索引的数据,get_stock_historical_data 函数不起作用
- c# - 如何更改 MahApps TabItem 的文本颜色
- java - 确定 IF & WHERE 线与 2D 平面相交(在 3D 空间中)
- node.js - nodejs cookie-session类型错误