SpringBoot使用SSE流,打tar包发版后出现问题

news/2025/1/24 14:28:48/文章来源:https://www.cnblogs.com/Hlmove/p/18689482

SpringBoot使用SSE流,打tar包发版后出现问题

以下纯个人实践,如有问题,还望指正~

出现的问题

出现原因:本地调试SSE推送数据没有问题,但是通过打包为tar包发版之后,出现了以下报错:

主要问题就是:

java.lang.IllegalArgumentException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.

贴张图:

企业微信截图_17373652857553

其实这个问题已经说的很明白了,去web.xml文件加上即可,但问题在于这是SpringBoot项目,配置web.xml有点离谱了,于是网络搜索解决方案加上SpringBoot就会获得这些结果:

方案1:给启动类加上注解

@WebFilter(urlPatterns = { "/*" }, asyncSupported = true)

本人项目实测没用,但有人成功过,列在这里

方案2:加过滤器

@Component
public class AsyncSupportFilter extends OncePerRequestFilter {
   @Override
   protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
       request.setAttribute(Globals.ASYNC_SUPPORTED_ATTR, true);
       chain.doFilter(request, response);
  }
}

这个里面就能看出来,还是在尝试启用asyncSupported,但我这边实测还是不行

那么提供最终的解决办法,个人亲测可用,不排除个例问题 ,仅供参考

实现方案:

/**
* 异步请求支持过滤器配置类
* 用于启用 Servlet 异步处理功能
* @author houjinbao
*/
@Configuration
public class AsyncSupportFilter {
   
  /**
    * 注册异步请求过滤器的 Bean
    * @return FilterRegistrationBean 过滤器注册对象
    */
  @Bean
  public FilterRegistrationBean<AsyncRequestFilter> asyncFilterRegistration() {
      // 创建过滤器注册对象
      FilterRegistrationBean<AsyncRequestFilter> registration = new FilterRegistrationBean<>();
      // 设置使用的过滤器
      registration.setFilter(new AsyncRequestFilter());
      // 设置过滤器匹配的 URL 模式,/*表示匹配所有请求
      registration.addUrlPatterns("/*");
      // 启用异步支持
      registration.setAsyncSupported(true);
      // 设置过滤器的优先级为最高
      registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
      return registration;
  }
   
  /**
    * 异步请求过滤器实现类
    * 继承 OncePerRequestFilter 确保每个请求只经过一次过滤器
    */
  private static class AsyncRequestFilter extends OncePerRequestFilter {
      @Override
      protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
              throws ServletException, IOException {
          // 设置请求属性,启用 Tomcat 的异步处理支持
          request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
          // 继续执行过滤器链
          chain.doFilter(request, response);
      }
  }
}

记得启动类加上@EnableAsync

其他方案:

方案4(不保真):

有外国老哥测试,可在TomCat文件里面去修改,配置TomCat的web.xml文件,也可实现

原文:stack overflow 文章

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/874723.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】20250124

读书就是这样好,无论心不在焉,板着长脸,只要考试及格,就是一个及格的人。【每日一题】 1.(20分) \(\hspace{0.6cm}\)如图所示,质量 \(M=2 \; \mathrm{kg}\) 的滑块套在光滑的水平轨道上,质量 \(m=1 \; \mathrm{kg}\) 的小球通过长 \(L=0.5 \; \mathrm{m}\) 的轻质细杆与…

Golang sync.pool源码解析

sync.Pool 是 Go 中用于对象复用的工具,可减少频繁创建和销毁对象的开销,从而优化内存使用和降低 GC 压力。本文通过分析其用法、真实案例及源码结构,详细解读了 sync.Pool 的读写流程及其背后的高效设计思想,为性能优化提供了实用参考。Golang sync.pool源码解析 - sync.p…

从靶场到实战:双一流高校多个高危漏洞

本文结合其它用户案例分析讲解挖掘某双一流站点的过程,包含日志泄露漏洞深入利用失败,到不弱的弱口令字典进入后台,再到最后偶遇一个貌似只在靶场遇到过的高危漏洞。本文结合其它用户案例分析讲解挖掘某双一流站点的过程,包含日志泄露漏洞深入利用失败,到不弱的弱口令字典…

Nginx 架构和安装

1.1 Nginx 概述 1.1.1 Nginx 介绍 Nginx:engine X ,2002年开发,分为社区版和商业版(nginx plus ) 2019年3月11日 F5 Networks 6.7亿美元的价格收购 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器 解决C10K问题(10K Connect…

Linux命令大全-快速查询手册

访问地址: 线上访问:https://git.io/linux 开源社区:https://github.com/jaywcjlove/linux-command 简要介绍: Linux 命令大全搜索工具,内容包含 Linux 命令手册、详解、学习、搜集,中文解释,支持背景切换。主要功能: 当前仓库搜集了 580 多个 Linux 命令,是一个非盈利…

IPTVnator - 最方便的开源 IPTV 播放器

IPTVnator 是一款视频播放器应用程序,提供对 IPTV 播放列表播放(m3u、m3u8)的支持。该应用程序允许用户使用远程 URL 或从本地文件系统上传文件来导入播放列表。此外,它还支持 XMLTV 格式的 EPG 信息,可以通过 URL 提供。该应用程序是一个使用 Electron(目前正在迁移到 T…

中电金信首次通过数据管理能力成熟度(DCMM)四级认证

日前,中国电子信息行业联合会发布《关于公布获得数据管理能力成熟度等级证书单位的通知(第十四批)》,中电金信正式通过数据管理能力成熟度(DCMM)等级认定——量化管理级(4级)。DCMM即数据管理能力成熟度评估模型(Data management Capability Maturity Model),是我国首…

执子之手与子偕老:镌刻在时光深处的爱情传奇

执子之手与子偕老:镌刻在时光深处的爱情传奇“死生契阔,与子成说。执子之手,与子偕老。” 这出自《诗经・邶风・击鼓》的千古名句,如同一首跨越千年的悠扬情歌,萦绕在人类情感的天际,描绘出爱情最纯粹、最美好的模样,承载着人们对永恒相伴、不离不弃的深深期许。它不仅仅…

二维数点问题

二维数点问题。P10814 【模板】离线二维数点 询问区间 \([l,r]\) 内,在值域为 \([0,x]\) 中数的个数。 想象这是个二维平面,我们要求的就是矩形内点的个数。通常用 cdq 做,将询问拆成两个点,将点按照x坐标排序,按照y坐标加入到树状数组中(为了满足第二条限制),这时就依次…

CS162 23Fall总结

CS 162 23Fall Lab 总结 PintOS是一个x86架构的教育用操作系统,它支持多线程,加载并运行用户程序,以及文件系统。骨架代码只提供了很简单的实现,本Lab需要丰富并增强这些模块的功能。本实验提供Bochs2和QEMU3模拟器模拟x86 CPU和相应外设来运行并调试PintOS.PintOS源码结构…

《汇编语言》阅读笔记

如题汇编语言 首先,我必须赞扬王爽老师,这是我见过写的最好的教科书了. 然后要注意,汇编语言这本书的前提是8086PC机十六位处理器.还要学x86和x64以及其他奇奇怪怪的架构的汇编 全称 AH&AL=AX(accumulator):累加寄存器 BH&BL=BX(base):基址寄存器 CH&CL=CX(co…

【unity】学习制作2D横板冒险游戏-3-

添加野猪添加刚体2D组件,碰撞组件,该碰撞组件是确保野猪能跟地面碰撞添加玩家图层和敌人图层,并应用,使野猪和玩家不会彼此被推着走碰撞剔除中选择Player和Enemy再增加一个碰撞组件当作触发器,设置如下,该碰撞组件是确保人物和怪物的互动基本属性及其计算 再如图路径下创建…