我如何从 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
。就是这样 :) 希望它对其他开发人员的帮助最大 :)
我在 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
。就是这样 :) 希望它对其他开发人员的帮助最大 :)