【问题标题】:Using Tomcat in Production for Spring Boot apps在 Spring Boot 应用程序的生产环境中使用 Tomcat
【发布时间】:2023-03-28 11:13:01
【问题描述】:

作为 Spring Boot 的新手,我需要了解以下内容,因为我无法直接找到 google 结果。 他们真正使用哪些应用程序服务器来部署现实生活中的那些 Spring Boot 应用程序? 公司真的在使用 Tomcat - 如果是的话,他们是否使用集群来实现它?

【问题讨论】:

    标签: spring spring-boot tomcat microservices


    【解决方案1】:

    Spring boot 有一个内置的 Tomcat 服务器,它只是从 Java 运行。

    Tomcat是内置在jar中的,所以在任何环境下都是一样的。

    这是一个典型的 spring boot jar,显示的是 tomcat jar:

    greg@greg-XPS-13-9360:~/work/boot-docker/target$ jar tvf boot-docker-1.0.3.jar | grep tomcat
      2293 Mon Jan 30 19:45:14 GMT 2017 BOOT-INF/lib/spring-boot-starter-tomcat-1.5.1.RELEASE.jar
    241640 Tue Jan 10 21:03:52 GMT 2017 BOOT-INF/lib/tomcat-embed-websocket-8.5.11.jar
    3015953 Tue Jan 10 21:03:50 GMT 2017 BOOT-INF/lib/tomcat-embed-core-8.5.11.jar
    239791 Tue Jan 10 21:03:50 GMT 2017 BOOT-INF/lib/tomcat-embed-el-8.5.11.jar
    

    我们将 Spring Boot 应用程序作为 docker 镜像(完整的虚拟 Unix 服务器)在 Redhat Openshift 云上运行,这是典型的。

    顺便说一句,Tomcat 是商业使用的,非常可靠。

    【讨论】:

    • 请原谅我的无知 - 我有 2 个查询标记 1) 所以真正的 prod 系统只要是安装了 java 的 *nix 服务器就可以了吗? 2)那么在这种情况下,您是否只运行 100 个 Spring Boot 项目的实例来处理服务?
    • @Velan 对第 1 点是肯定的,通常它们在可以弹性扩展的云中运行,但需要 100 秒的负载必须很大。
    • 感谢您的有用解释@EssexBoy
    【解决方案2】:

    使用 Spring Boot 应用程序,您可以生成一个包含嵌入式 Tomcat 的应用程序 jar。您可以将 Web 应用程序作为普通 Java 应用程序运行。

    如果您仍想使用 Tomcat 服务器部署应用程序。

    首先,您需要打包一个WAR 应用程序而不是JAR。为此,您需要将 pom.xml 更改为以下内容:

    <profiles>    
             <profile>
                <id>war</id>
                <properties>
                    <packaging.type>war</packaging.type>
                </properties>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                        <scope>provided</scope>
                    </dependency>
                </dependencies>
                <build>
                    <finalName>ROOT</finalName>
                </build>
            </profile>
    </profiles>
    

    让我们在 finalName 元素中修改最终的 WAR 文件名。 (就我而言,输出是 ROOT.war)

    接下来,通过实现SpringBootServletInitializer接口来初始化Tomcat所需的Servlet上下文:

    @SpringBootApplication
    public class YourApplication extends SpringBootServletInitializer {
    }
    

    然后,执行带有war profile的Maven命令包:

    mvn clean package -Pwar
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2010-10-03
      • 1970-01-01
      • 2020-05-31
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-09-25
      相关资源
      最近更新 更多