一个SpringBoot-starter小工具,修改自tomcat-redis-session-manager使其适配SpringBoot2.0+(Tomcat8.5+)。
- 将SpringBoot内嵌tomcat的session存储至redis。
- 与SpringSession通过Filter实现不同,该项目通过配置内嵌tomcat的Manager的方式来修改session存储位置。
- 环境:你的应用需要依赖web和redis的starter
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 配置:你的应用需要redis相关配置
spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= # 以及其他redis相关配置
- 引用starter依赖:
<dependency> <groupId>io.github.terloo</groupId> <artifactId>embedded-tomcat-session-redis-boot-starter</artifactId> <version>0.0.2</version> </dependency>
- 或者复制src至自己的项目中自行修改
- 全局开关,默认为true
server.servlet.session.redis.enable=true
- 生成redis键值的规则,默认采用tomcat的session键值生成规则,示例中修改为uuid
import io.github.terloo.springboot.tomcat.session.redis.RedisSessionKeyGenerator; import io.github.terloo.springboot.tomcat.session.redis.RedisSessionManager; @Component public class MyGenerator implements RedisSessionKeyGenerator { @Override public String generateKey(RedisSessionManager redisSessionManager, String requestedSessionId) { return UUID.randomUUID().toString(); } }
- 持久化策略
server.servlet.session.redis.strategy=onChange,afterRequest
- default:默认策略,只在识别到session改变时(见注意事项),在请求结束后进行持久化。
- onChange:只要进行了set、delelte操作,立即持久化
- afterRequest:每次请求结束后都进行持久化
onChange和afterRequest策略可以同时存在,存在任一时default策略将会失效
- 手动脏跟踪
启用后可以使用以下代码手动进行session持久化
server.servlet.session.redis.dirty-tracking.enable=true server.servlet.session.redis.dirty-tracking.flag=dirtyFlag # 脏跟踪标识,默认为__changed__
session.setAttribute("dirtyFlag", null);
- 由于判断对象是否相等使用equals,导致如果隐式修改一个session,session将不会被识别为已改变,如下
List myArray = session.getAttribute("myArray"); myArray.add(additionalArrayValue);