From 21ab473b2aa8e44c86a382af0f548f55724ba228 Mon Sep 17 00:00:00 2001 From: Marcus Da Coregio Date: Thu, 10 Aug 2023 11:54:42 -0300 Subject: [PATCH] Do not block when generating redis session id Closes gh-2393 --- .../redis/ReactiveRedisSessionRepository.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisSessionRepository.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisSessionRepository.java index ea6769c5..84460599 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisSessionRepository.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisSessionRepository.java @@ -24,6 +24,7 @@ import java.util.Set; import org.reactivestreams.Publisher; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import org.springframework.core.NestedExceptionUtils; import org.springframework.data.redis.core.ReactiveRedisOperations; @@ -123,12 +124,16 @@ public class ReactiveRedisSessionRepository @Override public Mono createSession() { - return Mono.defer(() -> { - MapSession cached = new MapSession(this.sessionIdGenerator); - cached.setMaxInactiveInterval(this.defaultMaxInactiveInterval); - RedisSession session = new RedisSession(cached, true); - return Mono.just(session); - }); + // @formatter:off + return Mono.fromSupplier(() -> this.sessionIdGenerator.generate()) + .subscribeOn(Schedulers.boundedElastic()) + .publishOn(Schedulers.parallel()) + .map((sessionId) -> { + MapSession cached = new MapSession(sessionId); + cached.setMaxInactiveInterval(this.defaultMaxInactiveInterval); + return new RedisSession(cached, true); + }); + // @formatter:on } @Override