1.引入依赖
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><!-- 引入 redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>>
在上面的示例中,除了引入Redis组件外,还需要引入spring-session-data-redis依赖。通过此组件实现Session信息的管理。
2.添加session配置类
packagecom.yangjunbo.JPADemo.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds =86400*30)publicclassSessionConfig{}
上面的示例配置了Session的缓存时间。maxInactiveIntervalInSeconds用于设置Session的失效时间,使用Redis共享Session之后,原Spring Boot的server.session.timeout属性不再有效。经过上面的配置后,Session调用就会自动去Redis上存取。另外,想要达到Session共享的目的,只需要在其他系统上进行同样的配置即可。
3.验证测试
创建测试类
packagecom.yangjunbo.JPADemo;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjavax.servlet.http.HttpSession;importjava.util.UUID;@RestController@RequestMapping()publicclassController{@RequestMapping("/uid")Stringuid(HttpSession session){UUID uid =(UUID) session.getAttribute("uid");if(uid ==null){
uid =UUID.randomUUID();}
session.setAttribute("uid", uid);return session.getId();}}
然后,启动项目,运行一个程序实例,启动端口号为8080,在浏览器中输入地址:http://localhost:8080/uid,页面返回会话的sessionId。
我们可以登录Redis客户端,查看Session是否已经保存到Redis,输入“keys ‘sessions’”查看所有的Session信息,如图所示。
一般mac上redis的安装目录 /usr/local/opt/redis/bin/redis-server /usr/local/etc/redis.conf
从上面的输出可以看到,sessionId是5c7b3e44-1695-4d2d-9955-a8ec80309eaa,与页面返回的sessionId一致。说明Redis中缓存的SessionId和实际使用的Session一致,Session已经在Redis中进行了有效的管理。
最后,模拟分布式系统再启动一个程序实例,启动端口号为8001,在浏览器中输入http://localhost:8001/uid,页面返回会话的SessionId如图所示。
从输出结果可以看到,程序实例1和程序实例2获取的是同一个Session,这说明两个程序实现了Session共享。
参考书籍 《springboot从入门到实战-章为忠著》
版权归原作者 摇滚侠 所有, 如有侵权,请联系我们删除。