我创建了spring boot web应用程序,但我无法在tomcat上部署spring boot web应用程序WAR文件,我可以将其作为java应用程序运行。如何在tomcat上将spring boot应用程序作为Web服务运行。我正在使用以下代码。如果可以在tomcat上运行,请在不使用web.xml和使用web.xml的情况下帮助我使用注释。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
以下代码为休息控制器
@RestController
public class HelloWorld{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ResponseEntity<String> get() {
return new ResponseEntity<String>("Hello World", HttpStatus.OK);
}
}
关注Pom.xml我正在使用
<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.6</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
答案 0 :(得分:32)
以下是有关如何将Spring Boot
应用程序部署为war
文件的两篇优秀文档。
您可以按照此春季启动howto-traditional-deployment文档 -
根据本文档的步骤 -
您更新应用程序的主类以扩展SpringBootServletInitializer
。
下一步是更新构建配置,以便项目生成war文件而不是jar文件。 <packaging>war</packaging>
标记所提供的嵌入式servlet容器依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
还有一种方式 -
请参阅此spring io documentation,其中概述了如何将spring boot应用程序部署到应用程序服务器。
步骤 -
将jar
包装更改为war
。
在spring-boot-maven-plugin
pom.xml
插件的声明
通过扩展SpringBootServletInitializer
并覆盖configure
方法
删除spring-boot-starter-tomcat dependency
并修改您的spring-boot-starter-web
依赖关系
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
在pom.xml
中,删除spring-beans
和spring-webmvc
依赖项。 spring-boot-starter-web
依赖项将包括这些依赖项。
答案 1 :(得分:12)
Spring boot提供了将应用程序部署为支持tomcat服务器的servlet 3.x
(不带web.xml )的传统war文件的选项。请参阅spring boot documentation。我将简要介绍一下你需要做什么。
第1步:修改pom.xml
将包装更改为战争:(您已经做过)
<packaging>war</packaging>
第2步:更改您的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
到
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
第3步:在pom.xml
标记下的<build>
修改您的战争名称(如果您需要避免附加战争名称的版本详细信息)。
<build>
<finalName>web-service</finalName>
.....
第4步:运行maven build来创建战争:clean install
步骤5:在tomcat中部署生成的war文件web-service.war
,并在浏览器http://<tomcat ip>:<tomcat port>/web-service/hello
中请求url
你应该得到Hello World
。
注意: 此外,您可以删除多余的依赖项,如@Ali Dehghani所说。
答案 2 :(得分:4)
将spring-boot-starter-tomcat
依赖项标记为provided
,如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
注1:从您的pom.xml
中删除多余的依赖项,如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
它们是 spring boot starter packages
的一部分注2:让jar不战争
答案 3 :(得分:0)
将弹簧靴子转换为弹簧靴子战争的过程记录在:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging 简而言之,按照您在示例中的方式设置启动器类,然后在.pom文件中将包装从jar切换到war。此外,您需要将spring-boot-starter-tomcat依赖项设置为已提供。再一次,该过程在上面的链接中以完整的形式记录。 有关此主题的更多信息,请参见弹簧io指南“将Spring Boot JAR应用程序转换为WAR”,该文档位于https://spring.io/guides/gs/convert-jar-to-war/ 如果我有任何进一步的帮助,请告诉我,我会帮助你。
答案 4 :(得分:0)
我遇到了这个问题。以上大部分都是好建议。我的问题是最初部署在Pivotal TC服务器上。
将pom中的包装作为WAR。
<packaging>war</packaging>
向pom添加依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
我使用Application类来保存main()。
Main有配置代码,因此可以注入EntityManager
等。此EntityManager
使用来自ApplicationContext
和persistence.xml
文件的信息来获取持久性信息。在SpringBoot下工作正常,但在Tomcat下没有。事实上,在Tomcat下,Main()
未被调用。 Application类扩展了SpringBootServletInitializer
。
以下方法添加到Application类:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
Application obj = new Application();
@SuppressWarnings("resource")
ConfigurableApplicationContext applicationContext =
new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
applicationContext.registerShutdownHook();
applicationContext.getBeanFactory().autowireBeanProperties(
obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
return application.sources(Application.class);
}
只需要最后一行 - 其他代码之前已在main()
中保存,并移至此处以注入EntityManager
正在工作。
所需的注释是:
@EnableAutoConfiguration
@ComponentScan
//@SpringBootApplication will consist of both of these and @Configuration
某些网址现在可能需要更改根上下文以包含
<artifactId>contextname</artifactId>.
希望有所帮助