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
最新文章
- [bzoj1670][Usaco2006 Oct]Building the Moat
- .net线程池
- 【Alpha阶段】第一次线上会议
- oracle中session的查询与删除
- Qt OpenCV Support Image Type 支持读写的图像格式
- PHPnow升级PHP 5.4与Mysql 5.5
- Android之ActionBar学习
- 了解大数据的技术生态系统 Hadoop,hive,spark(转载)
- 用stm32f0x建立新的工程重要步骤
- (C++)string类杂记
- 小程序wepy.js框架总结
- JS分页条插件
- Codeforces round 1083
- python windows 安装jieba....
- matplotlib 雷达图2
- VBA 调用DLL动态链接库
- Spring容器初始化数据(数据库)BeanPostProcessor的应用
- Rabbitmq的几种交换机模式
- 我理解的Future模式
- 万里长征第二步——django个人博客(第四步 ——创建数据库)
热门文章
- Spring AOP Log
- Kotlin集合——Set集合
- Ionic4.x ion-refresher 下拉更新
- 服务器端实时推送技术之SseEmitter的用法
- C++11 学习笔记 std::function和bind绑定器
- Qt widget中使用QML自定义电池
- phpexcel 导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法
- 使用Commons math做数值计算
- 深入浅出深度学习:原理剖析与python实践_黄安埠(著) pdf
- 条件概率和链式法则 conditional probability &; chain rule