springboot+nginx+tomcat+redis实现session共享
以前单机系统,我们session是存储是tomcat容器管理的。
但是现在集群系统的话,必须第三方存储session才行,springboot2支持很多存储,其中redis存储session最为流行;下面我们介绍下springboot+nginx+tomcat+redis实现session共享
1.docker上安装redis
docker pull redis:5
启动redis
docker run -p 6379:6379 -d redis:5
然后我们用Redis Desktop Manager 工具连接redis
我们下面新建springboot项目
因为用到redis,要加如下依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
application.yml配置
spring:
session:
store-type: redis #指定redis实现spring session
timeout: PT1H # Session 过期时间, PT开头 ‘D’ – 天 ‘H’ – 小时 ‘M’ – 分钟 ‘S’ – 秒
redis:
flush-mode: on_save # Sessions 刷新模式 on_save http response为committed才提交 immediate 立即提交
namespace: cpxtt # session 存储命名空间
redis:
host: 服务器ip地址
port: 6379
password:
lettuce:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
shutdown-timeout: 100 # 连接超时时间(毫秒)
我们直接通过HttpSession设置 即可把session存到redis中去;代码可以找本人获取
下面我们编写DockFile来实现项目自动运行
我们打包项目,因为是集群,所以两个项目版本分别搞成v1和v2 端口分别是8888和9999
项目1:
FROM centos
MAINTAINER cpxtt<cpxtt@126.com>
LABEL name="cpxtt Jre Image" \build-date="20200529"
ADD server-jre-8u151-linux-x64.tar.gz /home/
ADD springsession-v1.jar /home/
ENV WORKPATH /home/
WORKDIR $WORKPATH
ENV JAVA_HOME /home/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8888
CMD java -jar /home/springsession-v1.jar
项目2:
FROM centos
MAINTAINER cpxtt<cpxtt@126.com>
LABEL name="cpxtt Jre Image" \build-date="20200529"
ADD server-jre-8u151-linux-x64.tar.gz /home/
ADD springsession-v2.jar /home/
ENV WORKPATH /home/
WORKDIR $WORKPATH
ENV JAVA_HOME /home/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 9999
CMD java -jar /home/springsession-v2.jar
构建镜像
docker build -f myJreDockerFile -t cpxtt/myjre:1.1 .
docker build -f myJreDockerFile2 -t cpxtt/myjre:2.1 .
并且启动镜像
docker run -itd -p 8888:8888 eb587d987876
docker run -itd -p 9999:9999 45b7242944ca
浏览器访问测试
下面我们使用nginx来进行测试
因为本机自动有个nginx,我们先关掉,我们用 docker里的nginx
systemctl stop nginx.service
我们配置下nginx负载均衡
配置nginx.conf;
在http模块下配置下加
upstream www.jiangnanfeipeng.com{
server 172.17.0.2:8888 ;
server 172.17.0.3:9999 ;
}
在http下的server模块
location / {
proxy_pass http://www.jiangnanfeipeng.com;
index index.html index.htm;
}
hosts里配置下映射
服务器ip地址 www.jiangnanfeipeng.com
启动nginx
docker run -it --name=myNginx66 -v /home/data/nginx:/etc/nginx -p 80:80 nginx
到此springboot+nginx+tomcat+redis实现session共享讲解完成,感兴趣欢迎点赞留言和评论,谢谢!