使用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