导读:本期聚焦于李修然创作的《东方通TongWeb外置容器如何部署SpringBoot项目?jar包改war包完整步骤详解》,敬请观看详情。SpringBoot默认打包成内嵌Tomcat的可执行jar,直接扔到服务器就能跑,可在信创项目里这条路往往行不通。客户环境使用的是东方通TongWeb国产应用中间件,要求应用以war包形式部署到外置容器中统一管理,这时jar包就派不上用场了。本文围绕jar包改造为war包的完整流程展开,先讲清pom依赖调整、启动类继承SpringBootServletInitializer的写法,再给出打包部署到TongWeb的具体操作与常见报错排查,最后分析外置容器部署的特点、优势与适用场景,帮助你在国产化适配项目中少走弯路。

在信创国产化改造项目中,越来越多的政企客户环境用东方通TongWeb替换了Tomcat或WebLogic。TongWeb作为国产应用中间件,通常要求应用以war包的形式部署到外置容器中,由中间件统一管理生命周期、端口和连接池。而SpringBoot项目默认打成内嵌Tomcat的可执行jar包,直接运行虽然方便,却无法被TongWeb当作标准Web应用识别和托管。因此,把SpringBoot项目从jar包改造成war包并部署到TongWeb外置容器,是信创适配中非常典型的一道工序。本文从改造步骤、部署操作、特点优势与适用场景三个层面详细展开。

东方通TongWeb外置容器如何部署SpringBoot项目?jar包改war包完整步骤详解

一、SpringBoot项目从jar包改造为war包的完整步骤

改造的核心思路是:去掉内嵌容器对war部署的干扰,让生成的war包符合Servlet规范,可以被任意标准容器加载。整个改造只涉及pom.xml和启动类两处改动,代价非常小。

第一步是修改打包方式。在pom.xml中把<packaging>jar</packaging>改为war,如果没有显式声明packaging,默认值是jar,需要显式加上war声明:

<groupId>com.example</groupId>
<artifactId>demo-web</artifactId>
<version>1.0.0</version>
<!-- 打包方式改为war -->
<packaging>war</packaging>

第二步是处理内嵌Tomcat依赖。war包部署到外置容器时,内嵌的Tomcat不仅多余,还可能和TongWeb自带的Servlet实现产生类冲突,导致启动报错。标准做法是把spring-boot-starter-tomcat的scope改为provided:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 排除内嵌Tomcat,避免与外置容器冲突 -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <!-- provided表示编译期可用,打包时不带入war -->
        <scope>provided</scope>
    </dependency>
</dependencies>

第三步是改造启动类。SpringBoot的main方法启动方式在外置容器中不会被执行,容器加载war包时走的是Servlet 3.0+的SPI机制,需要启动类继承SpringBootServletInitializer并重写configure方法:

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    // 外置容器入口:容器启动时通过Servlet 3.0 SPI回调此方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoApplication.class);
    }

    // 保留main方法,本地开发时仍可java -jar或IDE直接启动
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

改完之后执行mvn clean package,target目录下会生成war包。这里有两个容易踩的坑需要注意:一是JDK版本要与TongWeb兼容,TongWeb 7一般支持JDK 8到17,具体看版本说明;二是如果项目里用了JSP,必须保证JSP文件位于src/main/webapp目录下,且打包插件不要遗漏web资源。另外,finalName建议设置成简短的应用名,因为TongWeb默认以war包名作为访问上下文路径:

<build>
    <finalName>demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

二、部署到TongWeb外置容器的具体操作

拿到war包后,登录TongWeb管理控制台。TongWeb 7默认控制台地址是http://127.0.0.1:9060/console,安装时如果修改过端口则以实际配置为准。进入左侧导航的应用管理页面,点击部署应用,选择上传war包或指定服务器上的文件路径,点击下一步后TongWeb会自动解析war结构并识别出SpringBoot应用。

部署向导中需要关注两个配置项:一是上下文根(Context Root),默认取war包名,比如demo.war对应/demo,也可以改成/作为根应用;二是虚拟主机或服务绑定,单机部署直接默认即可,集群场景需要勾选对应的服务实例。确认后点击完成,应用状态变为运行中即部署成功,此时通过http://主机:9060/demo可以访问接口。

如果不想用控制台,也可以走命令行方式。TongWeb兼容大部分Tomcat目录约定,将war包直接放到domains目录下对应实例的autodeploy文件夹中,容器启动时会自动解压部署。这种方式适合脚本化交付和CI/CD流水线对接。

部署过程中常见的报错有几类。第一类是ClassNotFoundException,指向spring内嵌tomcat相关类,多半是scope没改成provided导致类冲突;第二类是启动成功但访问404,通常是上下文根没配置对,或者SpringBoot的server.servlet.context-path配置与TongWeb的上下文根冲突,外置部署时建议删掉应用内的context-path配置,交给容器管理;第三类是EL表达式或JSP解析报错,多因TongWeb内置的JSP引擎版本与依赖的el-api版本不一致,把相关依赖同样设为provided即可。

三、外置容器部署的特点、优势与适用场景

先说特点。外置容器部署意味着应用的运行环境由中间件提供,端口、线程池、HTTP连接器、会话管理等基础设施全部收归TongWeb统一配置,应用本身只关注业务逻辑。这与jar包自包含、自带运行时的理念正好相反,两种模式没有绝对优劣,而是面向不同的管理诉求。

外置部署的优势主要体现在三个方面。首先是统一管控:运维人员可以在TongWeb控制台集中管理多个应用的生命周期,查看线程池、JVM、连接池监控数据,做灰度启停,不需要逐台服务器执行kill命令。其次是安全合规:国产中间件通过了等保和安全测评,政企客户在信创验收时要求应用跑在指定中间件上,war包部署是硬性要求。最后是资源复用与故障隔离:多个war应用共享同一个容器的线程池和连接池资源,由容器层面做隔离和限流,比每个应用独占一个JVM进程更节省内存。

适用场景可以这样判断:当项目面向党政、金融、军工等信创领域,客户指定东方通TongWeb作为中间件时,必须采用war包外置部署;当企业内部有成熟的中间件运维体系,需要统一端口规划、统一监控告警时,外置部署更合适;当应用规模小、追求快速迭代和容器化微服务部署时,jar包加Docker的方式反而更轻便。简单说,重管控、强合规选war包外置,重敏捷、云原生选jar包内嵌,理解了这个取舍逻辑,遇到国产化适配需求就能从容应对了。

TongWebSpringBootwar包部署修改时间:2026-09-13 13:20:51

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。