博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Session实战-传统单体应用集群部署解决方案
阅读量:6367 次
发布时间:2019-06-23

本文共 2847 字,大约阅读时间需要 9 分钟。

场景值1

一个维护了几百年的单体老项目,突然就火起来了,访问人数突然暴增,服务器资源告急,担心一下驾崩,老板一个电话过来跟你说:“!4@!#!!¥@!¥1¥@!”,然后你得大半夜从睡梦中醒来屁颠屁颠的整服务器。

场景值2

下班了,准备发完版本就回去。等等,老板还在演示,又不能中断服务器去部署应用。一不小心,一个钟过去了,还没结束,你得等啊等啊,终于可以发布了。然后你利索的./shutdown下去,代码啪啦啪啦的上传完,准备启动了,盯着启动日志,天哪,怎么log卡住不动了。然后客服机立马就有人来找你麻烦了。

更多场景值,此处省略好多 ...

Spring Session是什么

  • Spring Session提供了一个管理用户会话信息的API和实现。它还提供透明的整合:

    • HttpSession - 允许以应用程序容器(即Tomcat)中立的方式替换HttpSession。其他功能包括:
    • 群集会话 - Spring Session使得支持群集会话变得轻而易举,而不会受限于特定于应用程序容器的解决方案。
    • 多个浏览器会话 - 春季会话支持在单个浏览器实例中管理多个用户的会话(即与Google类似的多个经过身份验证的帐户)。
    • RESTful API - Spring Session允许在头文件中提供会话标识符以使用RESTful API
  • WebSocket - 提供HttpSession在接收WebSocket消息时保持活动状态的能力

白话:spring session抽象了一套API,并基于这套API对servlet容器提供的session进行无侵入集成,比如使用redis进行session管理,实现所谓的分布式session。

Spring Session坐标

以Maven做为依赖管理,基于redis的Spring Session实现

org.springframework.session
spring-session-data-redis
1.0.2.RELEASE
pom

Spring Session怎么使用

Spring session对主流的Servlet容器如Tomcat提供透明的整合HttpSession。这意味着开发人员使用HttpSession可借助Spring Session支持的实现切换实现。

使用redis

Redis有多种客户端实现,常用的有Jedis和Lettuce。具体差别读者可另行翻阅其他资料。本文以Jedis为例。

  • 基于java配置

    • Sring Java配置

      @EnableRedisHttpSessionpublic class Config{    @Bean    public LettuceConnectionFactory connectionFactory() {        return new JedisConnectionFactory();    }}

      说明:默认的JedisConnectionFactory()构造方法是链接localhost:6379无密码的redis-server,实际生产环境可按需选择合适的构造方法。

    • Java Servlet容器初始化

      Spring配置创建了一个名为springSessionRepositoryFilter实现的Spring Bean Filter。该springSessionRepositoryFilterbean负责HttpSession用Spring Session支持的自定义实现来替换它。

      为了让我们Filter发挥它的魔力,Spring需要加载Config.java。最后,我们需要确保我们的Servlet容器(即Tomcat)使用我们springSessionRepositoryFilter的每个请求。

      幸运的是,Spring Session提供了一个AbstractHttpSessionApplicationInitializer,继承它,把配置传入进去即可,代码如下:

      public class Initializer extends AbstractHttpSessionApplicationInitializer {    publicInitializer() {        super(Config.class);    }}
  • 基于xml配置

    • bean 配置

      基于xml的配置也相当简单,这里注意一下p命名空间,添加引用xmlns:p="http://www.springframework.org/schema/p"

    • web.xml 配置 filter

      springSessionRepositoryFilter
      org.springframework.web.filter.DelegatingFilterProxy
      springSessionRepositoryFilter
      /*
      REQUEST
      ERROR

到此为止,应用已经集成了Spring Session,感觉不要太爽了!

测试Spring Session

  • 把浏览器本地缓存先清一清
  • 输入访问地址 :8080/login

图片

注意看中间的红色部分,没有了原来的jessionid,但是新增了 session。这是实现分布式session的关键。

  • 登录系统,访问到主页
  • 关闭服务器,重启
  • 刷新页面,咦?不需要重新登录?

集群部署(负载均衡)

这里不是本文重点,就不展开细说了,由于上面已经解决了应用服务器session共享的问题,所以集群实现也是非常的简便,通过nginx反向代理到2个部署到应用的tomcat即可。

推荐

ifast是一款基于Spring Boot + Mybatis + Mybatis Plus搭建的快速开发平台。ifast集成了代码生成器,具有高效的开发效率。以Spring Boot为基础框架,Mybatis plus为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,基于Bootstrap构建的hplus作为前端框架。

访问请点击

转载地址:http://jsrma.baihongyu.com/

你可能感兴趣的文章
大隐隐于市,你身边的那些安全隐患你都知道么?
查看>>
物联网市场迅猛发展 “中国芯”如何把握机会?
查看>>
aws 上使用elb 的多域名问题
查看>>
环球花木网的目标就是致力于打造成为“园林相关行业的专业性门户网站
查看>>
《编写高质量代码:改善c程序代码的125个建议》—— 建议14-1:尽量避免对未知的有符号数执行位操作...
查看>>
《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
查看>>
全球程序员编程水平排行榜TOP50,中国排名第一
查看>>
HDFS 进化,Hadoop 即将拥抱对象存储?
查看>>
Edge 浏览器奇葩 bug:“123456”打印成“114447”
查看>>
Sirius —— 开源版的 Siri ,由 Google 支持
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 2.7 小结
查看>>
《Windows Server 2012活动目录管理实践》——第 2 章 部署第一台域控制器2.1 案例任务...
查看>>
Java Date Time 教程-时间测量
查看>>
Selector.wakeup实现注记
查看>>
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>