SpringBoot使用SSE流,打tar包发版后出现问题
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 "true" to servlet and filter declarations in web.xml.
贴张图:
https://typora-1309454696.cos.ap-nanjing.myqcloud.com/work/202501241425361.png
着实这个问题已经说的很明白了,去web.xml文件加上即可,但问题在于这是SpringBoot项目,配置web.xml有点离谱了,于是网络搜索办理方案加上SpringBoot就会得到这些结果:
方案1:给启动类加上注解
@WebFilter(urlPatterns = { "/*" }, asyncSupported = true)本人项目实测没用,但有人成功过,列在这里
方案2:加过滤器
@Component<br>public class AsyncSupportFilter extends OncePerRequestFilter {<br> @Override<br> protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {<br> request.setAttribute(Globals.ASYNC_SUPPORTED_ATTR, true);<br> chain.doFilter(request, response);<br> }<br>}这个里面就能看出来,还是在尝试启用asyncSupported,但我这边实测还是不可
那么提供终极的办理办法,个人亲测可用,不排除个例问题 ,仅供参考
实现方案:
/**<br> * 异步请求支持过滤器配置类<br> * 用于启用 Servlet 异步处理功能<br> * @author houjinbao<br> */<br>@Configuration<br>public class AsyncSupportFilter {<br> <br> /**<br> * 注册异步请求过滤器的 Bean<br> * @return FilterRegistrationBean 过滤器注册对象<br> */<br> @Bean<br> public FilterRegistrationBean<AsyncRequestFilter> asyncFilterRegistration() {<br> // 创建过滤器注册对象<br> FilterRegistrationBean<AsyncRequestFilter> registration = new FilterRegistrationBean<>();<br> // 设置使用的过滤器<br> registration.setFilter(new AsyncRequestFilter());<br> // 设置过滤器匹配的 URL 模式,/*表示匹配所有请求<br> registration.addUrlPatterns("/*");<br> // 启用异步支持<br> registration.setAsyncSupported(true);<br> // 设置过滤器的优先级为最高<br> registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);<br> return registration;<br> }<br> <br> /**<br> * 异步请求过滤器实现类<br> * 继承 OncePerRequestFilter 确保每个请求只经过一次过滤器<br> */<br> private static class AsyncRequestFilter extends OncePerRequestFilter {<br> @Override<br> protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) <br> throws ServletException, IOException {<br> // 设置请求属性,启用 Tomcat 的异步处理支持<br> request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);<br> // 继续执行过滤器链<br> chain.doFilter(request, response);<br> }<br> }<br>}记得启动类加上@EnableAsync
其他方案:
方案4(不保真):
有外国老哥测试,可在TomCat文件里面去修改,配置TomCat的web.xml文件,也可实现
原文:stack overflow 文章
https://typora-1309454696.cos.ap-nanjing.myqcloud.com/work/202501241422202.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]