基于Spring-Session实现会话共享

1 基于Spring-Session实现会话共享

Note:以下方法基于官网session部分进行实现

1.1 Session共享的实现方式

  1. 基于Redis实现
  2. 基于JDBC实现
  3. 基于Java实现

而每种实现方式的具体细节有所不同,分别又分为XML、@Configuration注解、Java三种方式来进行实现;

当前采用基于JDBC的注解方式进行实现。

1.2 JDBC+SpringBoot注解方式实现会话共享

前提:具备分布式的部署环境,目前采用lvs(ipvsadm+DR+RS)库实现的分布式部署以及路由管理;

1.2.1 基础库

先获取spring-session-1.3.1.RELEASE.jar,拷贝到/src/lib目录下,然后在项目的pom.xml文件添加如下依赖

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-1.3.1</artifactId>
    <version>1.3.1.RELEASE</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/lib/spring-session-1.3.1.RELEASE.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-core-2.0.2</artifactId>
    <version>2.0.2.RELEASE</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/lib/spring-session-core-2.0.2.RELEASE.jar</systemPath>
</dependency>
1.2.2 配置DataSource源

Note:基于jdbc实现session共享的原理:

spring-session框架基于jdbc实现session共享,即会将session id存入指定的数据库中进行存储和管理,因此在不同的分布式环境中,所有服务都是从同一个数据库表中获取session id,由此来进行session的共享,因此,基于spring session框架实现session共享,需配置DataSource数据源,实现@EnableJdbcHttpSession下的相关逻辑,并进行服务启动时的相关配置;

  1. 使用@EnableJdbcHttpSession注解标记Session 共享的配置类,并实现dataSource以及transactionManager两个必要方法:
@Slf4j
@EnableJdbcHttpSession
public class DmSessionConfig {

    @Autowired
    private Environment environment;

    @Bean
    public DataSource dataSource() {
        SimpleDriverDataSource dmDataSource = initDmDataSource();
        //配置data source数据库源成功后,Spring Session会自动创建session表并对Session数据进行管理
        //注意,旧版SpringSession与新版所创建的表结构不一致,应根据现有的数据库SPRING_SESSION表结构进行lib选择
        return dmDataSource;
    }

    private SimpleDriverDataSource initDmDataSource() {
        SimpleDriverDataSource dmDataSource = new SimpleDriverDataSource();
        String databaseUrl = environment.getProperty(Constant.PROPERTY_DATASOURCE_URL);
        String username = environment.getProperty(Constant.PROPERTY_DATASOURCE_USER_NAME);
        String password = environment.getProperty(Constant.PROPERTY_DATASOURCE_USER_PASSWORD);
        this.log.info("databaseUrl:"+databaseUrl);
        //设置达梦数据库的驱动类
        dmDataSource.setDriverClass(DmDriver.class);
        dmDataSource.setUsername(username);
        dmDataSource.setPassword(password);
        dmDataSource.setUrl(databaseUrl);
        return dmDataSource;
    }

    @Bean(name = "platformTransactionManager")
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        this.log.info("set data source:" + dataSource);
        return new DataSourceTransactionManager(dataSource);
    }
}

到此,SpringBoot+SpringSession+JDBC方式的session 共享实现已经完成,具体的细节修改可参考

Spring Http Session官方文档: https://docs.spring.io/spring-session/docs/current/reference/html5/index.html#httpsession

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值