【问题标题】:Using Spring Boot Web Application with Pivotal TC Server将 Spring Boot Web 应用程序与 Pivotal TC Server 一起使用
【发布时间】:2025-12-09 09:25:04
【问题描述】:

我从 Spring Tool Suite 中将我的项目重构为 Spring Boot 应用程序。所有文档都展示了如何使用嵌入式 Tomcat 实例创建一个自包含的应用程序,该实例运行良好且非常棒。

然而,在此之前,我有自己的 Maven Web-MVC 项目,该项目具有基于 XML 的 Spring 配置。我可以将它直接部署到 TC Server 并且效果很好。我最喜欢的是:热插拔!我可以添加新的函数和类,它们立即被 TC Server 拾取,无需任何额外配置。

但是,使用 Spring Boot 和嵌入式 Tomcat,我发现情况并非如此。热交换非常有限,许多基本更改都需要重新启动。从我一直在阅读的内容来看,TC Server 是一个更复杂的 Tomcat 版本,所以这引出了我的两个问题:

1) 如何让我的 Maven Spring Boot 应用程序通过 STS 在 TC Server 上运行?启动新的 Pivotal TC 运行配置对我不起作用。

2) Spring Boot 文档示例为什么不强调使用 TC Server 而不是嵌入式 Tomcat,而前者似乎工作得更好?

【问题讨论】:

    标签: spring maven spring-boot tcserver


    【解决方案1】:

    您可以将 Spring Boot 应用程序部署到 tc Server,就像将其部署到任何其他独立 servlet 容器一样。您需要进行三项更改:

    1. 扩展 SpringBootServletInitializer 以便容器正确引导您的应用程序:

      @Configuration
      @EnableAutoConfiguration
      @ComponentScan
      public class Application extends SpringBootServletInitializer {
      
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
              return application.sources(Application.class);
          }
      }
      
    2. 将项目转换为使用战争包装。 Maven 示例:

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <!-- ... -->
          <packaging>war</packaging>
          <!-- ... -->
      </project>
      
    3. 将您的spring-boot-starter-tomcat 依赖标记为已提供,以便嵌入式Tomcat 不会与tc Server 中的类冲突。 Maven 示例:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
      </dependency>
      

    我不知道 Tomcat 和 tc Server 的类重载能力有什么不同。也许您在 tc Server 实例中配置了 Spring Loaded?如果是这样,您也可以将它与 Spring Boot 一起使用。

    【讨论】:

    • 我只需要对我的项目进行 #1 更改,但现在我不确定如何进行。使用我的 Web Maven 项目,我可以右键单击 STS 中的项目并选择“在服务器上运行”。 Pivotal TC Server 会出现,我可以将应用程序发送到那里。但是,如果我右键单击我的 Spring Boot 项目,只有两个选项是 Run as "Spring Boot App" 或 "Java Application"
    • @IcedD​​ante 我只是将生成的目标/项目拖到服务器上,然后点击运行。这对你不起作用吗?此外,上面列出的所有三个步骤(包括我在下面提到的更改)都是将 Spring Boot 应用程序部署为适当的 WAR 所必需的。如果你不这样做,你会遇到非常奇怪的问题。作为@Andy_Wilkinson 的旁注,第二步是不正确的。应该是&lt;packaging&gt;war&lt;/packaging&gt;
    • Mattwar 包装正是我所需要的。谢谢!
    最近更新 更多