Skip to content

Commit 21ab473

Browse files
Do not block when generating redis session id
Closes gh-2393
1 parent 2d4233f commit 21ab473

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisSessionRepository.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.reactivestreams.Publisher;
2626
import reactor.core.publisher.Mono;
27+
import reactor.core.scheduler.Schedulers;
2728

2829
import org.springframework.core.NestedExceptionUtils;
2930
import org.springframework.data.redis.core.ReactiveRedisOperations;
@@ -123,12 +124,16 @@ public ReactiveRedisOperations<String, Object> getSessionRedisOperations() {
123124

124125
@Override
125126
public Mono<RedisSession> createSession() {
126-
return Mono.defer(() -> {
127-
MapSession cached = new MapSession(this.sessionIdGenerator);
128-
cached.setMaxInactiveInterval(this.defaultMaxInactiveInterval);
129-
RedisSession session = new RedisSession(cached, true);
130-
return Mono.just(session);
131-
});
127+
// @formatter:off
128+
return Mono.fromSupplier(() -> this.sessionIdGenerator.generate())
129+
.subscribeOn(Schedulers.boundedElastic())
130+
.publishOn(Schedulers.parallel())
131+
.map((sessionId) -> {
132+
MapSession cached = new MapSession(sessionId);
133+
cached.setMaxInactiveInterval(this.defaultMaxInactiveInterval);
134+
return new RedisSession(cached, true);
135+
});
136+
// @formatter:on
132137
}
133138

134139
@Override

0 commit comments

Comments
 (0)