使用Spring Boot创建WAR文件,并将其部署到另一个Tomcat中

正如之前提到的,Spring Boot内置了Tomcat,因此可以非常方便地进行开发。然而,在开发过程中,我们可能希望在本地使用STS + Spring Boot和内置Tomcat进行开发,而在生产环境或集成测试环境中,我们可能希望使用单独的Tomcat(或Jetty、JBoss等)并在那里运行。事实上,我的当前工作场所就是这种配置。

因此,本次我想写一下使用STS + Spring Boot创建WAR文件并将其部署到另一个Tomcat上并运行的步骤。

前提 tí)

    • 環境はもろもろ揃っているものとします。

 

    • 以下の公式を参照しています。

 

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

创建一个可以成为素材的应用程序的雏形

首先,我们简单地创建一个部署应用的模板。在这里,我们决定使用以下的Maven命令创建一个Maven项目。请注意,group和artifact等等的内容可以自行决定。

mvn -B archetype:generate -DgroupId=com.example -DartifactId=nagap -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart

将使用Spring Boot的配置写在pom.xml中。

在这里,可以按以下方式修改pom.xml文件。

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>nagap</artifactId>
    <packaging>war</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <name>nagap</name>
    <url>http://maven.apache.org</url>

    <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>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

重点有以下两个方面。

    • packagingをwarにすること(当然ですね)

 

    spring-boot-starter-tomcatのscopeをprovidedにすること

尝试使用超级简单的方法来实施

我們將以以下的方式非常簡單地實現App類。
需要注意的是,這個類將作為入口點。
為避免偏離目的,我們不會在意類結構等事項。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class App extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }

    @RequestMapping(value = "nagap", method = RequestMethod.GET)
    public String getSomething() {
        return "something";
    }
}

在这里,重要的是以下两点。

    • SpringBootServletInitializerクラスを継承すること

 

    configureメソッドをoverrideすること

在这里先进行一次操作确认。
选择项目并右键点击。
选择【Run As】→【Spring Boot App】以启动嵌入式Tomcat。
访问http://localhost:8080/nagap,在浏览器上显示“something”即表示成功。
在此之前,使用STS + Spring Boot 已经完成了一个可用的应用程序(虽然比较简陋,但请谅解)。

创建WAR文件

这个只是打包而已,所以很简单。
在STS中选择项目,右键点击->【Run As】->【6 Maven build】->在Goals中输入”package”->点击【Run】按钮。
等待一段时间后,WAR文件将会在项目根目录的target文件夹中创建。
这次创建的文件名是nagap-1.0.0-SNAPSHOT.war。

部署到另一个Tomcat上。

这个问题很简单,哈哈。
将已完成的war文件放置在想要部署的Tomcat的webapps文件夹下。
然后启动Tomcat就可以了。

在另一个Tomcat上进行部署的应用程序进行操作验证

我会在这里进行操作确认。
http://localhost:8080/nagap-1.0.0-SNAPSHOT/nagap
只要在浏览器上显示“something”,就可以了。
以下两点非常重要。

    • アクセスする時のコンテキスト名はwarのファイル名(ここではnagap-1.0.0-SNAPSHOT)になる

 

    warを作成する時のjavaのバージョンと別Tomcatが動いているjavaのバージョンが違うと404が返却されることがある←ハマりました

直接部署,無需web.xml或上下文定义,非常容易完成。
可能的核心在于

    • SpringBootServletInitializerクラスを継承すること

 

    configureメソッドをoverrideすること

我认为当我们在这方面遵循这些指南时,它们会在内部产生良好的效果。虽然以Tomcat为例,但Spring Boot也提供了其他服务器(如WebLogic、Jetty和JBoss)的官方示例,因此如果您在实际工作中使用它们,不妨参考一下这些文档。具体请查看:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file

广告
将在 10 秒后关闭
bannerAds