最近使用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
下面的是我的公眾號二維碼圖片,歡迎關注,歡迎留言,一起學習,一起進步。
