小编典典

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

spring-boot

我从Spring Tool Suite内部将项目重构为Spring
Boot应用程序。所有文档都显示了如何使用嵌入式Tomcat实例创建一个自包含的应用程序,该实例有效且出色。

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

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

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

2)当前者看起来更好用时,为什么Spring Boot文档示例不强调在嵌入式Tomcat上使用TC Server?


阅读 677

收藏
2020-05-30

共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);
        }
    }
  1. 将项目转换为使用战争包装。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>
  1. 将您的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
Load?如果是这样,您也可以在Spring Boot中使用它。

2020-05-30