1. 场景前提
假设有这样一个场景:一个 Spring Boot 应用使用了 Dubbo(2.6.5) 作为 RPC 组件,现在想利用 war 包的方式部署在 tomcat 上,利用 tomcat 来启动应用
默认 Spring Boot 启动是依靠 java -jar xxx.jar
的方式来启动,这种启动方式只会带动一个 Spring Context 容器,如果是用 war 包方式来启动,那么就会涉及到 Spring 的父子容器,在与 Dubbo 进行集成时,是否会出现问题呢
2. 环境搭建
代码已经上传至 https://github.com/masteryourself/diseases ,详见
diseases-dubbo/diseases-dubbo-war
工程
正常的 Spring Boot 应用打成 war 包,只需要按照如下两步即可生成 war 包,然后使用外置 Tomcat 容器部署 war 包即可
2.1 配置文件
1. pom.xml
把之前的 pom_back.xml
改成 pom.xml
<!-- 修改打包方式为 war -->
<packaging>war</packaging>
<dependencies>
<!-- 依赖改为 provided -->
<!-- 注意:这里不再需要引入 servlet-api jar 包了,因为 tomcat-embed-core jar 包已经内置了 javax.servlet 包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration