将 Spring Boot Web 应用程序与 Pivotal TC Server 一起使用

Posted

技术标签:

【中文标题】将 Spring Boot Web 应用程序与 Pivotal TC Server 一起使用【英文标题】:Using Spring Boot Web Application with Pivotal TC Server 【发布时间】:2015-01-28 10:25:53 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class Application extends SpringBootServletInitializer 
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
            return application.sources(Application.class);
        
    
    

    将项目转换为使用战争包装。 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>
    

    将您的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 包装正是我所需要的。谢谢!

以上是关于将 Spring Boot Web 应用程序与 Pivotal TC Server 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring 执行器可以与非 Web Spring Boot 应用程序一起使用吗?

Spring Boot的文件上传与下载

十Spring Boot 部署与服务配置

java.lang.IllegalStateException:当我尝试将 keycloak 与 spring boot web + spring security 项目集成时,当前用户主体不是类型

Spring Boot 部署与服务配置

Spring Boot 部署与服务配置