Spring Webflux вызывает одну функцию HandlerFunction в одном потоке на запрос? - PullRequest
0 голосов
/ 05 ноября 2018

Учитывая приведенный ниже фрагмент - безопасно ли передавать простой не поточно-ориентированный HashMap в SomeHandlerFunction, который будет использовать его в других бинах с автопроводкой в ​​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, но этот случай меня запутал.

1 Ответ

0 голосов
/ 05 ноября 2018

Если это HashMap изменчиво, это не очень хорошая идея - даже с Spring MVC. Что вы должны сделать вместо этого? Это действительно зависит от варианта использования под рукой.

Если вы пытаетесь настроить локальный кэш в памяти, вы можете использовать такую ​​библиотеку, как Caffeine, или просто ConcurrentMapCache.

Если вы хотите поделиться конфигурационными ключами с этим компонентом, вы можете обернуть эту карту в Collections.unmodifiableMap или даже лучше, сделав это неизменным POJO.

Если это предназначено для переноса временных данных, связанных с обрабатываемым запросом, вам следует вместо этого использовать атрибуты запроса или контекст Reactor.

...