【问题标题】:Spring boot app with Embedded tomcat带有嵌入式 tomcat 的 Spring Boot 应用程序
【发布时间】:2017-10-21 09:28:00
【问题描述】:

我正在做一个项目,我们正在使用 Spring-Boot、STS。我只是通过右键单击 main 启动项目并作为 spring boot 应用程序运行,它只是运行。现在我被要求在 Amazon EC2 实例等其他机器上使用嵌入式 tomcat 运行它。 在正常的spring项目中,我以前做的是,创建一个war文件,放在tomcat->webapps文件夹中,然后从bin启动它。 如果是嵌入式 tomcat,我将如何在没有 tomcat 的情况下运行我的应用程序。我的战争(包括嵌入式 tomcat 依赖项)将在哪里运行? 请提出一些解决方案,这是第一次使用 spring boot 和嵌入式 tomcat。 感谢您的建议。

【问题讨论】:

  • 您需要在哪里运行您的应用程序?云服务能够运行 jar 文件,您不必担心嵌入式 tomcat。

标签: java spring-mvc tomcat spring-boot amazon-ec2


【解决方案1】:

建议为spring boot应用构建jar文件。这个 jar 中包含嵌入的 tomcat。但是当然你也可以将它构建为战争文件。要让它们都运行,您只需运行 java -jar your-jar-file.jarjava -jar your-war-file.war

【讨论】:

    【解决方案2】:

    只需在 pom 或 gradle 构建中拉入 Spring boot tomcat starter。这会将所有 tomcat 依赖项带到您的应用程序 jar 中。嵌入式 tomcat 意味着在你的 JVM 中运行时 Spring boot 使用你的 jar 中的依赖项启动一个服务器。 这样所有推送war到tomcat文件夹和重启的问题都消除了。 使用 Spring Boot 插件构建您的 jar。 mvn spring-boot:run 或 gradle bootRun 然后将这个 jar 作为任何可执行 jar 运行。

    java -jar your-app.jar
    

    这会调用 Spring Boot Main 类。它在内部启动您的服务器并创建您的应用程序上下文。 这适用于所有平台,您的本地或 EC2。

    【讨论】:

      【解决方案3】:

      首先,让我澄清一下现代 Java Web 应用程序开发背景下的 warjar

      在遥远的过去,应用程序被编写、打包到 .war 文件中并部署到运行在某些操作系统(如 Linux)上的 tomcat 服务器上。通常这些应用程序很大,反映了某些service 的整个业务逻辑,例如图书馆网站,它完全依赖于这个应用程序,该应用程序通过为每个请求生成合适的响应来处理请求。

      随着时间的推移,网络变得越来越大:More users + more data + stronger computers = more traffic。很难保持这种应用程序开发模式,因为它无法在高吞吐量流量下可靠地提供服务。

      Microservices 就是这样诞生的。长话短说: 在 Java 中,构建微服务的最佳方式是使用 spring-boot,而部署微服务的最佳方式是为每个微服务使用嵌入式服务器,例如 tomcat。然后将这些微服务理想地部署到云端(如AWS)。云服务知道如何处理jars,因为 jar 是它们的原生对象。

      现在,对于您的问题,您的战争将走向何方?你的战争不会进行。您的 jar 将由云服务执行,并且由于它具有嵌入式 tomcat 依赖项,它将运行 tomcat,它将侦听默认端口 8080。这将是您构建的应用程序的网关。云服务可能会为您的应用程序分配一些DNS,您将能够通过这种方式与它嵌入的tomcat 进行通信。

      【讨论】:

        【解决方案4】:

        使用您正在使用的 IDE 将其转换为 jar。

        然后:

        在 Windows 上,您必须在环境变量(变量名 = java)中设置 java.exe(带有完整路径)。然后你可以运行 java -jar "jar name with the full path"

        如果没有设置路径,那么你要做的是: 示例:

        "C:\Program Files\Java\jdk1.7.0_67\bin\java.exe" -jar "jar name with the full path"
        

        - 它会 100% 工作 - 检查一下

        谢谢:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-14
          • 2015-07-31
          • 2016-05-02
          • 1970-01-01
          • 2015-04-18
          • 1970-01-01
          • 2014-12-24
          • 1970-01-01
          相关资源
          最近更新 更多