0

我从 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,而前者似乎工作得更好?

4

1 回答 1

4

您可以将 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 一起使用。

于 2014-12-01T10:35:43.347 回答