咱们已经完成了单应用框架的整合工作,可以满足开发工作需求了,应用在上线部署之前,咱们还要解决一个系统高可用问题,需要将应用部署成集群。但是集群会引发一个新的问题,那就是用户登录使用系统,会在每个集群节点都有一个session,会导致我们无法跟踪用户会话信息。所以就需要把session进行集中管理,来解决集群session共享的问题。
spring已经提供了比较好的解决方案springsession模块,将session信息统一管理,需要第三方的存储服务,这里咱们选用的redis缓存服务。
所以咱们应用要实现session共享功能,需要spring整合session和redis两个模块。
那么咱们就开始整合工作吧。
第一步,pom文件中引用redis和session的jar
<!-- ==共享session=== -->
<!-- spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
<!--spring-session-data-redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
重点注意下redis和session的版本
1.5.4.RELEASE和1.3.5.RELEASE
不然会出现找不到各种class的问题
第二步,application.properties配置redis和session的信息
# spring session使用存储类型
#spring.session.store-type=redis
# spring session刷新模式:默认on-save
#spring.session.redis.flush-mode=on-save
#spring.session.redis.namespace=
# session超时时间,单位秒
#server.session.timeout=30
#redis
#spring.redis.host=localhost
#spring.redis.port=6379
#spring.redis.password=123456
#spring.redis.database=0
#spring.redis.pool.max-active=8
#spring.redis.pool.max-idle=8
#spring.redis.pool.max-wait=-1
#spring.redis.pool.min-idle=0
#spring.redis.timeout=0
这里给了一份详细的信息,
实际使用最小配置只需要下面给的几项
#session配置
spring.session.store-type=redis
server.session.timeout=1800
spring.session.redis.flush-mode=on-save
spring.session.redis.namespace=${app.service.name}
#redis的配置
spring.redis.host=${app.redis.host}
spring.redis.port=${app.redis.port}
这样springboot就完成了整合redis和session的功能,不需要任何其他java配置。
下面来测试一下吧。
启动咱们的两个应用,先启动一个,修改端口号后,再启动一个;
为了简单,这里就不配置nginx了,直接一个浏览器访问两个应用就行。
1000端口先登录;
1001端口也可以直接访问了;
可以看看redis中的session信息。
这里的两个session并不是两个应用产生的两个,而是security的安全机制,用户登录成功后,会新生成一个session,为了防止恶意会话跟踪。
回顾总结
集群部署需要解决session共享问题,spring提供了session和redis的方案,springboot整合非常方便,只需要application.properties配置信息就可以了。
单应用框架,咱们解决了很多问题:
- 用户请求问题
- 页面渲染问题
- 应用配置信息问题
- 应用日志问题
- 数据存储问题
- 权限管理问题
- 密码安全问题
- 数据源监控问题
- 共享session问题
到这里,咱们架构单应用框架基本上就完成了,后续根据实际项目需求,将更多的精力专注到业务逻辑开发方面,提高开发效率。
当然还可以继续在此基础上,丰富框架的基础功能,咱们未来在慢慢完善。