我在Spring Tool Suite中将我的项目重构为Spring Boot应用程序。所有文档都展示了如何创建一个包含嵌入式Tomcat实例的自包含应用程序,该实例很有用。
在此之前,我有自己的Maven Web-MVC项目,为Spring提供基于XML的配置。我可以将它直接部署到TC Server,它运行良好。我最喜欢的:热插拔!我可以添加新的功能和类,它们立即被TC Server选中,无需任何其他配置。
然而,使用Spring Boot和嵌入式Tomcat,我发现情况并非如此。 Hotswapping非常有限,许多基本更改都需要重新启动。从我以前读过的东西来看,TC Server是一个更复杂的Tomcat版本,所以这引出了我的两个问题:
1)如何通过STS在TC Server上运行我的Maven Spring Boot应用程序?启动新的Pivotal TC Run配置对我不起作用。
2)为什么没有Spring Boot文档示例强调TC Server在嵌入式Tomcat上的使用,前者似乎工作得更好?
答案 0 :(得分:3)
您可以将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);
}
}
将项目转换为使用war包装。 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中使用它。