​

spring-boot整合spring-session实现mysql的session共享

springboot提供了简单且易用的方式实现session共享。话不多说,直接开始吧,我们以mysql关系型数据库和redis非关系型数据库为例,讲一下如何适用spring-session实现session会话共享。其他数据库也可以参考本章快速实现

mysql方式session共享

依赖

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

以及mysql数据库连接库

配置

  1. 需要导入官方提供的mysql两张默认表,其他数据库也有提供sql文件
  2. 设置​​application.propeties​​​中增加配置​​spring.session.store-type=JDBC​​,不配置也可以,其他配置如下:
server.servlet.session.timeout =#会话超时。如果未指定持续时间后缀,则将使用秒。
spring.session.jdbc.initialize-schema = embedded#数据库模式初始化模式。
spring.session.jdbc.schema = classpath中:组织/ springframework的/会话/ JDBC / schema- @ @ 平台@ @ .SQL#的路径SQL文件,以用于初始化数据库架构。
spring.session.jdbc.table-name = SPRING_SESSION#用于存储会话的数据库表的名称。

表结构及sql文件

​spring-session-jdbc​​依赖两张表:

SPRING_SESSION
SPRING_SESSION_ATTRIBUTES

通过官方提供的sql文件导入两张表到数据库即可:

DROP TABLE IF EXISTS SPRING_SESSION_ATTRIBUTES;
DROP TABLE IF EXISTS SPRING_SESSION;
CREATE TABLE SPRING_SESSION (
PRIMARY_ID CHAR(36) NOT NULL,
SESSION_ID CHAR(36) NOT NULL,
CREATION_TIME BIGINT NOT NULL,
LAST_ACCESS_TIME BIGINT NOT NULL,
MAX_INACTIVE_INTERVAL INT NOT NULL,
EXPIRY_TIME BIGINT NOT NULL,
PRINCIPAL_NAME VARCHAR(100),
CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
) ENGINE=INNODB ROW_FORMAT=DYNAMIC;

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 VARCHAR(200) 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
) ENGINE=INNODB ROW_FORMAT=DYNAMIC;

根据配置的mysql数据库连接方式,以上步骤后spring-session就已经正常运行了

redis方式session共享

redis方式共享也很简单,步骤如下

依赖

添加依赖库

<dependency>  
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

配置

  1. 需要在springboot中启用注解​​@EnableRedisHttpSession​
  2. ​application.properties​​中配置redis
spring.redis.host=localhost  
spring.redis.port=6379

以上就可以spring-session就可以正常运行了,是不是很简单。

如果觉得博主写得还不错,欢迎“点赞、收藏、关注”一键三连!