zoukankan      html  css  js  c++  java
  • Spring Boot整合Spring Session实战

    传统java web应用session都是由应用服务器(如tomcat)保存在内存中,这对应但节点应用来说没问题;但对于应用集群来说会造成各节点之间的session无法共享,一个节点挂掉后,其他节点接管后无法获取挂掉节点的session信息,会使用户需要重新登陆,影响用户体验。Spring Session可以把集群中各节点的session集中存储,解决session共享问题。本文只要介绍Spring Session使用JDBC、Redis两种方法来保存seesion。本文中demo所使用的软件环境为:Spring Boot 2.1.4.RELEASE、jdk8。

    1、JDBC方式

    这里以oracle数据库为例,其他数据也可以。

    1.1、引入依赖

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-jdbc</artifactId>
    </dependency>

    1.2、配置存储方式

    application.properties里增加:

    spring.session.store-type=jdbc

    1.3、配置数据源

    需在application.properties配置数据源,否则连不了数据库,数据源的配置方式很多,可能还会用到其他组件,这里就不具体演示了。

    spring.datasource.url=
    spring.datasource.username=
    spring.datasource.password=

    1.4、创建session相关表

    各数据库的sql脚本在classpath:org/springframework/session/jdbc目录下

    CREATE TABLE SPRING_SESSION (
      PRIMARY_ID CHAR(36) NOT NULL,
      SESSION_ID CHAR(36) NOT NULL,
      CREATION_TIME NUMBER(19,0) NOT NULL,
      LAST_ACCESS_TIME NUMBER(19,0) NOT NULL,
      MAX_INACTIVE_INTERVAL NUMBER(10,0) NOT NULL,
      EXPIRY_TIME NUMBER(19,0) NOT NULL,
      PRINCIPAL_NAME VARCHAR2(100 CHAR),
      CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
    );
    
    CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
    CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
    CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);
    
    CREATE TABLE SPRING_SESSION_ATTRIBUTES (
      SESSION_PRIMARY_ID CHAR(36) NOT NULL,
      ATTRIBUTE_NAME VARCHAR2(200 CHAR) NOT NULL,
      ATTRIBUTE_BYTES BLOB NOT NULL,
      CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
      CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
    );

    1.5、测试

    启动程序后调用session.setAttribute方法后可以看到表里有数据了:

    1.6、自定义表名

    Spring Session默认的表名为SPRING_SESSION、SPRING_SESSION_ATTRIBUTES;可以建成自己想要的表名,如:I_SPRING_SESSION、I_SPRING_SESSION_ATTRIBUTES(注:属性表的表名时session表名后增加“_ATTRIBUTES”),然后在application.properties里增加如下配置即可:

    spring.session.jdbc.table-name=I_SPRING_SESSION

    2、Redis方式

    2.1、引入依赖

    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    <dependency>
      <groupId>io.lettuce</groupId>
      <artifactId>lettuce-core</artifactId>
    </dependency>

    2.2、配置存储方式

    application.properties里增加:

    spring.session.store-type=redis

    2.3、配置redis

    application.properties里增加:

    spring.redis.host=10.39.196.10
    spring.redis.port=6379
    spring.redis.password=123456

    2.4、测试

    启动程序后调用session.setAttribute方法后可以看到redis里有数据了:

    2.5、自定义key的前缀

    Spring Session默认保存在redis里的数据前缀为spring:session,可以自定义如i:spring:session,然后在application.properties里增加如下配置即可:

    spring.session.redis.namespace=i:spring:session
  • 相关阅读:
    刷题记录:[ByteCTF 2019]EZCMS
    angularJS——自定义指令
    HTML5——语音输入
    jQuery表单验证插件——jquery.validate.js
    纯CSS气泡效果
    管理Cookie的插件——jquery.cookie.js
    网页打印
    CSS hack
    如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)
    让DIV水平和垂直居中的几种方法
  • 原文地址:https://www.cnblogs.com/wuyongyin/p/11775849.html
Copyright © 2011-2022 走看看