diff --git a/modules/core/session-core/src/main/java/com/lingniu/ingest/session/SessionProperties.java b/modules/core/session-core/src/main/java/com/lingniu/ingest/session/SessionProperties.java index 01c4d03a..d928c38b 100644 --- a/modules/core/session-core/src/main/java/com/lingniu/ingest/session/SessionProperties.java +++ b/modules/core/session-core/src/main/java/com/lingniu/ingest/session/SessionProperties.java @@ -7,7 +7,7 @@ import java.time.Duration; @ConfigurationProperties(prefix = "lingniu.ingest.session") public class SessionProperties { - private Store store = Store.MEMORY; + private Store store = Store.REDIS; private Duration ttl = Duration.ofMinutes(30); @@ -16,6 +16,9 @@ public class SessionProperties { } public void setStore(Store store) { + if (store == Store.MEMORY) { + throw new IllegalStateException("session.store supports only redis; configured value: memory"); + } this.store = store; } diff --git a/modules/core/session-core/src/main/java/com/lingniu/ingest/session/config/SessionCoreAutoConfiguration.java b/modules/core/session-core/src/main/java/com/lingniu/ingest/session/config/SessionCoreAutoConfiguration.java index 07c80b79..d742db71 100644 --- a/modules/core/session-core/src/main/java/com/lingniu/ingest/session/config/SessionCoreAutoConfiguration.java +++ b/modules/core/session-core/src/main/java/com/lingniu/ingest/session/config/SessionCoreAutoConfiguration.java @@ -17,15 +17,10 @@ import org.springframework.data.redis.core.StringRedisTemplate; @EnableConfigurationProperties(SessionProperties.class) public class SessionCoreAutoConfiguration { - @Bean - @ConditionalOnProperty(prefix = "lingniu.ingest.session", name = "store", havingValue = "memory") - public Object rejectedLegacyMemorySessionStore() { - throw new IllegalStateException("session.store=memory has been removed; configure session.store=redis"); - } - @Bean @ConditionalOnBean(StringRedisTemplate.class) - @ConditionalOnProperty(prefix = "lingniu.ingest.session", name = "store", havingValue = "redis") + @ConditionalOnProperty(prefix = "lingniu.ingest.session", name = "store", havingValue = "redis", + matchIfMissing = true) @ConditionalOnMissingBean public SessionStore redisSessionStore(StringRedisTemplate redis, SessionProperties properties) { // Redis 只保存会话元数据索引;真实 Netty Channel 仍在各协议进程本地内存中。 diff --git a/modules/core/session-core/src/test/java/com/lingniu/ingest/session/config/SessionCoreAutoConfigurationTest.java b/modules/core/session-core/src/test/java/com/lingniu/ingest/session/config/SessionCoreAutoConfigurationTest.java index 7b42483e..2a57c150 100644 --- a/modules/core/session-core/src/test/java/com/lingniu/ingest/session/config/SessionCoreAutoConfigurationTest.java +++ b/modules/core/session-core/src/test/java/com/lingniu/ingest/session/config/SessionCoreAutoConfigurationTest.java @@ -43,12 +43,22 @@ class SessionCoreAutoConfigurationTest { } @Test - void rejectsLegacyMemorySessionStoreMode() { + void usesRedisSessionStoreByDefaultWhenRedisTemplateExists() { + contextRunner + .withBean(StringRedisTemplate.class, () -> mock(StringRedisTemplate.class)) + .run(context -> { + assertThat(context).hasSingleBean(SessionStore.class); + assertThat(context).hasSingleBean(RedisSessionStore.class); + }); + } + + @Test + void rejectsMemorySessionStoreModeWithRedisOnlyRule() { contextRunner .withPropertyValues("lingniu.ingest.session.store=memory") .run(context -> assertThat(context.getStartupFailure()) .hasRootCauseInstanceOf(IllegalStateException.class) - .hasMessageContaining("session.store=memory has been removed") - .hasMessageContaining("session.store=redis")); + .hasStackTraceContaining("session.store supports only redis") + .hasStackTraceContaining("memory")); } }