首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring Boot War部署到Tomcat

Spring Boot War部署到Tomcat
EN

Stack Overflow用户
提问于 2015-01-12 22:44:29
回答 12查看 114.7K关注 0票数 76

我正在尝试将Spring Boot应用程序部署到Tomcat,因为我想部署到AWS。我创建了一个WAR文件,但它似乎不能在Tomcat上运行,尽管它是可见的。

详细信息:

  1. 是我的应用程序:

@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}

  1. 在阅读了一些pagesquestion-answers后,我在我的POM中添加了以下内容:

">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),我把它放到了“

  1. ”文件夹中。
  2. 我启动了Tomcat,可以看到我的应用程序列出了,在我的例子中,应用程序的链接上的"/highlighter-1.0-SNAPSHOT".
  3. Clicking显示了"Status 404“页面。
  4. 当我只运行Spring Boot应用程序时,没有容器,它在本地主机上运行:7777,但当我在Tomcat中运行它时,那里什么都没有。

更新:有了另一个reference。不确定它有多有用。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2015-01-12 23:37:21

本指南详细介绍了如何在Tomcat上部署Spring Boot应用程序:

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file

基本上,我需要添加以下类:

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>
票数 106
EN

Stack Overflow用户

发布于 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版本中运行该项目并访问控制器,如下所示

http://localhost:8080/demo/hi

如果由于某种原因无法将项目添加到tomcat中,请在项目中单击鼠标右键,然后转到构建路径->配置构建路径-> project Faces

确保仅选择了这3个

动态web模块3.1 Java 1.8 Javascript 1.0

票数 25
EN

Stack Overflow用户

发布于 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-tomcatscope --当然没有提供它。

当您运行main方法时,控制台输出应该告诉您已经注册的上下文;使用它来获得正确的URL。

话虽如此,spring-boot目前必须在JEE世界中存在(直到它被广泛采用)。出于这个原因,spring人员记录了一种构建war而不是可执行jar的方法,用于部署到servlet或JEE容器。这使得许多spring-boot技术可以用于限制使用wars (或ears)以外的任何东西的环境中。然而,这只是对这样一个事实的回应,即此类环境相当常见,并且不被视为解决方案的必要或甚至不可取的一部分。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27904594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档