Spring Boot项目打包成WAR包,部署到宝兰德中间件踩坑全记录(附完整POM配置)

张开发
2026/4/20 3:13:50 15 分钟阅读

分享文章

Spring Boot项目打包成WAR包,部署到宝兰德中间件踩坑全记录(附完整POM配置)
Spring Boot项目WAR包部署宝兰德中间件实战指南1. 国产化迁移背景下的部署挑战最近几年国产中间件在金融、政务等关键领域逐步替代传统WebLogic、WebSphere等国外产品。宝兰德作为国产中间件的代表之一其兼容性适配成为开发者必须掌握的技能点。不同于Tomcat这类轻量级容器企业级中间件对应用部署有着更严格的规范要求。Spring Boot默认内嵌Tomcat的设计理念与外部应用服务器部署存在天然冲突。当我们将一个开发阶段运行良好的Spring Boot应用打包成WAR部署到宝兰德时往往会遇到各种水土不服的症状。典型表现包括类加载冲突如ClassCastException依赖包版本不兼容配置文件加载顺序异常静态资源路径解析错误这些问题的本质是Spring Boot的约定优于配置哲学与企业级中间件的严格规范之间的碰撞。理解这个底层矛盾是解决所有部署问题的钥匙。2. 项目打包环节的陷阱规避2.1 双打包插件冲突解析执行mvn clean package后出现xxx.war和xxx.war.original两个文件这是典型的插件冲突表现。其根本原因在于!-- 问题复现的插件配置示例 -- plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId version3.1.0/version /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins两个插件的执行顺序与作用插件名称执行阶段产出文件适用场景maven-war-pluginpackagexxx.war传统Java EE应用部署spring-boot-maven-pluginpackagexxx.war.original可执行JAR/WAR包部署解决方案对于需要部署到外部容器的场景应当移除spring-boot-maven-plugin保留标准的maven-war-plugin配置。2.2 本地依赖打包配置当项目依赖不在Maven中央仓库的JAR包如达梦数据库驱动时需要特殊处理plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId configuration webResources resource directorylib//directory targetPathWEB-INF/lib/targetPath includes include**/*.jar/include /includes /resource /webResources /configuration /plugin注意lib目录应放在项目根目录下与src目录同级3. 容器冲突深度解析与解决方案3.1 ClassCastException根源探究报错WsServerContainer cannot be cast to org.apache.tomcat.websocket.server.WsServerContainer的直接原因是Spring Boot默认打包会包含内嵌Tomcat宝兰德中间件自带WebSocket实现两个容器类加载器尝试加载同名类时发生冲突依赖排除的正确姿势dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId /exclusion /exclusions /dependency3.2 常见兼容性问题清单在宝兰德上部署时可能遇到的典型问题Servlet API版本冲突现象NoSuchMethodError或ClassNotFoundException解决统一使用中间件提供的servlet-apiJSP编译异常现象JSP文件无法编译或渲染错误解决检查中间件支持的JSP版本静态资源404现象CSS/JS文件加载失败解决调整资源路径前缀匹配规则4. 完整POM配置参考以下是经过生产验证的完整配置方案project !-- 基础配置省略 -- dependencies !-- Web依赖排除Tomcat -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId /exclusion /exclusions /dependency !-- 其他必要依赖 -- /dependencies build finalName${project.artifactId}/finalName plugins !-- 核心打包插件 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId version3.3.2/version configuration failOnMissingWebXmlfalse/failOnMissingWebXml webResources resource directorylib//directory targetPathWEB-INF/lib/targetPath includes include**/*.jar/include /includes /resource /webResources /configuration /plugin !-- Spring Boot配置插件非必须 -- plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration classifierexec/classifier skiptrue/skip /configuration /plugin /plugins /build /project5. 部署后的调优建议成功部署只是第一步生产环境还需要注意JVM参数优化宝兰德推荐的内存配置模式GC策略选择建议类加载隔离配置中间件的类加载策略解决第三方库冲突的方案监控集成暴露Spring Boot Actuator端点对接中间件管理控制台在最近的一个政务云项目中我们通过上述配置方案成功将Spring Boot应用部署到宝兰德集群平稳运行超过6个月。关键点在于提前做好依赖树的梳理避免容器功能重叠。

更多文章