我如何从 spring boot 应用程序中分离集成 tomcat

How can i detach from integrated tomcat from a springboot application

我在 springboot 中有一个项目,当我 运行 mvn spring-boot:run 它使用嵌入式 tomcat 部署应用程序时,我需要 运行 一个带有 tomcat,并将应用程序编译为 WAR,并将其添加到 tomcat 容器。

查看 Spring 的文档,了解如何 convert a spring boot JAR application to a WAR

您必须从依赖项中排除 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 包 worflow。

谢谢大佬回答我,终于知道怎么办了。

首先要访问 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);
    }
}

就是这样!最后我只是通过 运行ning mvn clean package -Dmaven.test.skip=true 禁用测试来编译我的应用程序,一旦应用程序被编译到 target 目录,我用 [=24 编译了 docker 图像=] 当然在应用程序目录中。最后 运行 我的容器由 运行ning sudo docker run -p 5000:8080 myspringbootappcontainer。就是这样 :) 希望它对其他开发人员的帮助最大 :)