我正在尝试将Spring Boot应用程序部署到Tomcat,因为我想部署到AWS。我创建了一个WAR文件,但它似乎不能在Tomcat上运行,尽管它是可见的。
详细信息:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(SampleController.class, args);
}
}
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/help")
@ResponseBody
String home() {
String input = "Hi! Please use 'tag','check' and 'close' resources.";
return input;
}
}
application.properties具有以下特性:
server.port=${port:7777}
">http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
com.niewlabs荧光笔1.0-快照war 1.8 org.springframework.boot spring-boot-starter-parent 1.1.9版本starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat提供
我运行了“mvn包”,得到了WAR文件(大小250Mb),我把它放到了“
更新:有了另一个reference。不确定它有多有用。
发布于 2015-01-12 23:37:21
本指南详细介绍了如何在Tomcat上部署Spring Boot应用程序:
基本上,我需要添加以下类:
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
另外,我在POM中添加了以下属性:
<properties>
<start-class>mypackage.App</start-class>
</properties>
发布于 2016-09-12 15:10:31
嘿,请确保对pom.xml进行此更改
<packaging>war</packaging>
在依赖项部分,确保提供了tomcat,这样您就不需要嵌入式tomcat插件了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
这是整个pom.xml
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<start-class>com.example.Application</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Application类应该是这样的
Application.java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
/**
* Used when run as JAR
*/
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
/**
* Used when run as WAR
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
您还可以添加一个控制器来测试MyController.java
package com.example;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@RequestMapping("/hi")
public @ResponseBody String hiThere(){
return "hello world!";
}
}
然后,您可以在tomcat8版本中运行该项目并访问控制器,如下所示
如果由于某种原因无法将项目添加到tomcat中,请在项目中单击鼠标右键,然后转到构建路径->配置构建路径-> project Faces
确保仅选择了这3个
动态web模块3.1 Java 1.8 Javascript 1.0
发布于 2015-01-12 23:29:43
我认为你被这里不同的范例弄糊涂了。首先,war文件和服务器部署--这些属于Java企业版(Java EE)。这些概念在spring-boot应用程序中没有实际的位置,它遵循不同的模型。
Spring-boot负责创建一个嵌入式容器,并在其中直接从标准jar文件运行您的服务(尽管它可以做更多的工作)。我认为这个模型的目的是支持微服务开发--其中每个服务都有自己的容器,并且是完全自包含的。您也可以使用您的代码来生成Java应用程序,但是考虑到spring-boot要容易得多(对于某些类型的应用程序/服务),这将是愚蠢的。
因此,有了这些信息,你现在必须决定你要遵循的范式,你需要遵循这一点,而且仅此而已。
Spring-boot是可执行的--您只需在App类中运行main方法,您可以从命令行或使用您喜欢的IDE、maven或gradle (提示: maven是正确的答案)。这将启动一个tomcat服务器(默认情况下),您的服务将在其中可用。根据您在上面发布的配置,您的服务应该位于:http://localhost:7777/context/help
-- context
将替换为您尚未共享的上下文名称。
你不应该创建一场战争,运行tomcat,或者部署任何东西。在spring-boot中,这些都不是必需的。您的pom中的打包应该是jar
,而不是war
,并且应该删除spring-boot-starter-tomcat
的scope
--当然没有提供它。
当您运行main方法时,控制台输出应该告诉您已经注册的上下文;使用它来获得正确的URL。
话虽如此,spring-boot目前必须在JEE世界中存在(直到它被广泛采用)。出于这个原因,spring人员记录了一种构建war而不是可执行jar的方法,用于部署到servlet或JEE容器。这使得许多spring-boot技术可以用于限制使用wars (或ears)以外的任何东西的环境中。然而,这只是对这样一个事实的回应,即此类环境相当常见,并且不被视为解决方案的必要或甚至不可取的一部分。
https://stackoverflow.com/questions/27904594
复制相似问题