Spring boot集成spring session實現session共享


最近使用spring boot開發一個系統,nginx做負載均衡分發請求到多個tomcat,此時訪問頁面會把請求分發到不同的服務器,session是存在服務器端,如果首次訪問被分發到A服務器,那么session就會被存到A服務器,再次訪問時負載均衡會分發到B服務器那么第一次訪問的session信息就會獲取不到之前的session信息,所以需要實現session共享,還好有spring session,使用簡單的配置即可實現session共享,下面介紹下:

1. pom.xml中引入jar包

<!-- Spring Boot Redis 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-core</artifactId> </dependency>

2. 添加RedisSessionConfig配置類

在項目的目錄中,創建一個java文件(名稱隨意)即可,我這里名稱是RedisSessionConfig.java

@EnableRedisHttpSession這個注解非常最重要,加了它之后,會使用spring的一個攔截器來實現Session共享的操作,而配置的這個Bean,則是讓Spring根據配置文件中的配置連到Redis。

SpringSession 需要注意的就是redis需要2.8以上版本,然后開啟事件通知,在redis配置文件里面加上

notify-keyspace-events Ex // 打開此配置,其中Ex表示鍵事件通知里面的key過期事件,每當有過期鍵被刪除時,會發送通知 

或是使用如下命令開啟開啟事件通知:

redis-cli config set notify-keyspace-events Egx 

如果你的Redis不是你自己維護的,比如你是使用阿里雲的Redis數據庫(我就是這種情況),你不能夠更改它的配置,那么可以使用下面的java配置文件即可。

package org.spring.springboot.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration // maxInactiveIntervalInSeconds 默認是1800秒過期,這里測試修改為60秒 @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) public class RedisSessionConfig { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } } 

3. 配置redis連接

Spring Boot會自動創建一個RedisConnectionFactory將Spring Session連接到端口6379(默認端口)上localhost上的Redis服務器的連接。在生產環境中,您需要確保更新配置以指向Redis服務器

src/main/resources/application.properties

# Redis 配置 # Redis數據庫索引(默認為0) spring.redis.database=0 # Redis服務器地址 spring.redis.host=192.168.0.1 # Redis服務器連接端口 spring.redis.port=6379 # Redis服務器連接密碼(默認為空) spring.redis.password=1234 

上面三個步驟搞定后,即可session共享,有任何問題歡迎留言溝通哦~

了解更多spring session內容可以訪問官網:https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-redis.html


下面的是我的公眾號二維碼圖片,歡迎關注,歡迎留言,一起學習,一起進步。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM