如何从 springboot 应用程序中分离集成的 tomcat
Posted
技术标签:
【中文标题】如何从 springboot 应用程序中分离集成的 tomcat【英文标题】:How can i detach from integrated tomcat from a springboot application 【发布时间】:2019-12-11 15:12:57 【问题描述】:我在springboot中有一个项目,当我运行mvn spring-boot:run
时,它使用嵌入式tomcat部署应用程序,我需要使用tomcat运行一个容器,并将应用程序编译为WAR,并将其添加到tomcat容器中.
【问题讨论】:
【参考方案1】:您必须从依赖项中排除 tomkat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
在此之后添加 WAR 包工作流。
【讨论】:
【参考方案2】:查看 Spring 的文档以了解如何convert a spring boot JAR application to a WAR。
【讨论】:
【参考方案3】:谢谢大佬回复我,终于知道怎么做了。
首先要访问 Tomcat 的管理仪表板,我们需要创建一组文件,如下所示:
-MySpringBootApp
|-->src
|----|->myspringbootapppackage
|------------------|->MySpringBootApp.java
|-->Dockerfile
|-->tomcat-users.xml
|-->pom.xml
tomcat-users.xml
我是这样写的
<tomcat-users>
<role rolename="admin-gui"/>
<user username="tomcat" password="asd123" roles="manager-gui"/>
</tomcat-users>
在我的Dockerfile
我这样写:
FROM tomcat:7-jre8-alpine
LABEL maintainer="myemail@myemail.mytld"
EXPOSE 8080
ARG WAR_FILE=target/myappbuilded-0.0.1-SNAPSHOT.war
ARG TOMCAT_USERS_FILE=tomcat-users.xml
ADD $WAR_FILE /usr/local/tomcat/webapps/myappbuilded.war
ADD $TOMCAT_USERS_FILE /usr/local/tomcat/conf
CMD ["catalina.sh", "run"]
在我的pom.xml
,我在dependecies添加了这个插件,并在文件顶部添加了名称为packaging
的节点
<packaging>war</packaging>
</dependencies>
...other dependencies ...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
最后在MySpringBootApp.java
,我只是从SpringBootServletInitializer
添加一个扩展,并添加一个覆盖方法configure
,文件如下所示:
package myspringbootpackage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class MySpringBootApp extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(MySpringBootApp.class);
public static void main(String[] args)
SpringApplication.run(MySpringBootApp.class, args);
就是这样!最后我只是通过运行mvn clean package -Dmaven.test.skip=true
禁用测试来编译我的应用程序,一旦应用程序被编译到target
目录,我就在应用程序目录中使用sudo docker build -t myspringbootappcontainer .
编译了docker镜像。最后通过运行sudo docker run -p 5000:8080 myspringbootappcontainer
运行我的容器。就是这样 :) 希望它对其他开发者有最大的帮助 :)
【讨论】:
以上是关于如何从 springboot 应用程序中分离集成的 tomcat的主要内容,如果未能解决你的问题,请参考以下文章
如何使用注释在 testng + maven 中分离单元测试和集成测试?