You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot集群环境中创建自定义Session Repository

自定义集群环境下的非持久化Session Repository实现

针对Spring Boot集群环境下非持久化会话存储的需求,推荐基于Hazelcast分布式内存实现,它天然支持集群会话同步且默认是非持久化配置,下面是完整代码示例:

1. 添加依赖(Maven)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-hazelcast</artifactId>
    </dependency>
    <dependency>
        <groupId>com.hazelcast</groupId>
        <artifactId>hazelcast</artifactId>
    </dependency>
</dependencies>

2. Hazelcast集群配置

创建Hazelcast配置类,定义集群名称、会话存储Map的非持久化规则:

import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HazelcastSessionConfig {

    @Bean
    public Config hazelcastConfig() {
        Config config = new Config();
        // 设置集群名称,确保所有集群节点使用相同名称
        config.setClusterName("spring-session-cluster");

        // 配置会话存储的Map,明确禁用持久化
        MapConfig sessionMap = new MapConfig("spring:session:sessions");
        // 设置会话过期时间(示例为30分钟)
        sessionMap.setTimeToLiveSeconds(1800);
        // 关闭持久化,确保会话仅存于内存
        sessionMap.getPersistenceConfig().setEnabled(false);

        config.addMapConfig(sessionMap);
        return config;
    }
}

3. 启用Spring Session

配置Spring Session使用Hazelcast作为存储介质:

import org.springframework.context.annotation.Configuration;
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;

@Configuration
@EnableSpringHttpSession
public class SpringSessionConfig {
    // 无需额外代码,Spring会自动关联Hazelcast实例处理会话
}

验证方式

  1. 启动多个Spring Boot实例,通过server.port设置不同端口(如8080、8081)
  2. 访问第一个实例的接口写入会话数据(例如HttpSession.setAttribute("user", "test"))
  3. 访问第二个实例的接口读取会话数据,会发现数据已同步,实现集群会话共享
  4. 重启任意实例后,会话数据会丢失,符合非持久化要求

如果需要完全自定义SessionRepository实现,也可以实现org.springframework.session.SessionRepository接口,基于分布式内存组件(如Ignite、Infinispan)实现,但上述Hazelcast方案是最便捷的开箱即用选择。

内容的提问来源于stack exchange,提问作者Pramod Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:25:34