前言
這里都是基於前面的項目基礎上的。springboot整合redis非常的方便,這也是springboot的宗旨,簡化配置。這篇文章就教大家如何使用springboot整合redis來實現session共享。
引入依賴
<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>
配置redis
在application.properties中配置redis
# Redis服務器地址
spring.redis.host=localhost
# Redis服務器連接端口
spring.redis.port=6379
# Redis服務器連接密碼(默認為空)
spring.redis.password=
因為我本地redis沒有設置密碼,所以密碼這里留空。這個配置項可以去掉,但是我留在這是是想告訴大家可以在這里配置redis密碼
實現session共享
其實springboot實現session共享非常的方便,只需要一個@EnableRedisHttpSession注解即可。把該注解加在springboot啟動類的上面。
到這里,已經實現redis存儲session的功能了。下面通過一個簡單例子測試下session是否存儲在redis中了。
新建一個SessionController.java,並且寫一個設置session的方法,如下:
啟動項目,通過postman調用,如下:
通過redis可視化工具,查看redis中是否存在該屬性:
通過查看,happyjava已經存在redis中了。
使用nginx測試
通過上面的例子,已經證明了session被redis存儲了,下面,我們通過把應用啟動在兩個端口,使用nginx轉發,測試session是否真的共享了。
nginx.config配置
upstream session_server {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://session_server;
proxy_set_header Host $host;
}
}
這里把localhost這個請求,轉發到了本地的8080和8081端口。
通過server.port指定程序的端口號
application.properties
server.port=8081
寫一個獲取session的方法
SessionController.java
這里通過Value注解獲取了配置文件的server.port屬性,並且通過getSession方法返回。
把程序啟動在兩個端口
IDEA設置可以多次啟動同個main方法。
把Allow paralled run勾上,即可多次啟動一個main方法了。我們先把server.port設置為8080啟動一次,然后改為8081再次啟動。
通過postman多次調用,可以獲得結果如下:
可以看到,port分別出現了8080和8081,並且都能夠正常獲取到之前設置的happyjava這個值,說明session共享已經配置成功了。
總結
springboot配置session共享是非常方便的,只需要EnableRedisHttpSession注解即可。其實也可以使用EnableMongoHttpSession注解用MongoDB來管理session。