分佈式系統中,Session共享有很多的解決方案,其中託管到緩存中應該是最常用的方案之一。
那SpringBoot如何使用Session
1、引入依賴
<!--session依賴注入-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2、Session 配置:
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30) //設置session失效時間
public class SessionConfig {
}
maxInactiveIntervalInSeconds: 設置 Session 失效時間,使用 Redis Session 之後,原 Spring Boot 的 server.session.timeout 屬性不再生效。
好了,這樣就配置好了,我們來測試一下
3、測試
添加測試方法獲取 sessionid
@RequestMapping("/uid")
String uid(HttpSession session) {
UUID uid = (UUID) session.getAttribute("uid");
if (uid == null) {
uid = UUID.randomUUID();
}
session.setAttribute("uid", uid);
return session.getId();
}
登錄 Redis 輸入 keys '*sessions*'
t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4
t(spring:session:expirations:1472976480000
其中 1472976480000 爲失效時間,意思是這個時間後 Session 失效,db031986-8ecc-48d6-b471-b137a3ed6bc4
爲 sessionId,登錄 http://localhost:8080/uid 發現會一致,就說明 Session 已經在 Redis 裏面進行有效的管理了。
如何在兩臺或者多臺中共享 Session
其實就是按照上面的步驟在另一個項目中再次配置一次,啓動後自動就進行了 Session 共享。