You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weblogic12.2.1.3部署带EnableAsync注解的Spring Batch提交后空指针异常咨询

问题诱因分析

  • 错误页面配置不一致:堆栈中NPE触发在weblogic.servlet.internal.ServletResponseImpl.sendContentError方法,该方法空指针的核心诱因是Weblogic服务器未配置全局错误页,或错误页配置指向不存在的资源。两台同版本服务器表现不同,优先排查故障机的错误页配置与正常机存在差异。
  • 异步请求与错误页过滤器冲突:你使用了@EnableAsync注解,Spring Batch任务提交后异步执行时,原始HTTP响应可能已经提交并关闭,此时如果异步任务抛出异常,Spring Boot的ErrorPageFilter会尝试往已关闭的响应中写入错误信息,触发Weblogic容器内部的空指针。如果两台服务器的异步线程池参数配置不同,故障机线程池资源不足导致任务超时、异常的概率更高,就会稳定复现问题。
  • 服务器缓存损坏:堆栈末尾指向JSP写入逻辑,故障机可能存在JSP编译缓存损坏的情况,渲染错误页面时读取缓存失败触发空指针。
  • 容器配置参数差异:两台服务器的weblogic.xml、web.xml配置不一致,故障机缺少对应错误状态码的映射配置,或配置值为空。
  • Weblogic补丁版本差异:两台服务器虽大版本均为12.2.1.3,但补丁安装情况不同,故障机缺少Weblogic官方针对Servlet响应错误处理的相关补丁,触发已知的空指针BUG。

解决办法

  • 同步Weblogic错误页配置:登录Weblogic控制台,进入「服务>Web服务器>目标服务器名称>HTTP」选项卡,对比两台服务器的「默认错误页面路径」配置,将故障机配置调整为与正常机完全一致,避免错误跳转时空指针。
  • 调整错误页过滤器适配异步场景:在Spring Boot配置类中新增自定义ErrorPageFilter,跳过异步请求的错误页处理逻辑,代码示例如下:
import org.springframework.boot.web.servlet.support.ErrorPageFilter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Configuration
public class WebConfig {
    @Bean
    public ErrorPageFilter errorPageFilter() {
        return new ErrorPageFilter() {
            @Override
            protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
                // 异步请求已经提交响应,跳过错误页处理
                if (request.isAsyncStarted()) {
                    filterChain.doFilter(request, response);
                    return;
                }
                super.doFilterInternal(request, response, filterChain);
            }
        };
    }
}
  • 清理Weblogic临时缓存:停止故障节点服务,删除对应服务实例下的tmp、cache目录所有文件,重启服务后重新部署WAR包,清除损坏的JSP编译缓存。
  • 同步容器配置文件:对比两台服务器部署包中的weblogic.xml、WEB-INF/web.xml配置,确保error-page相关配置完全一致,无空值或无效路径。
  • 优化异步任务返回逻辑:提交Spring Batch异步任务后直接返回任务提交成功的响应,不要等待异步任务执行结果,避免后续任务异常触发响应写入逻辑。
  • 同步Weblogic补丁版本:执行java weblogic.version命令对比两台服务器的补丁安装列表,给故障机安装与正常机完全一致的补丁集,修复容器已知BUG。

内容的提问来源于stack exchange,提问作者Harshil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:54:05