将SpringBoot项目发布到Tomcat
SpringBoot的库里包含了Tomcat,我认为它在开发阶段非常方便。然而,在生产环境等情况下,如果需要修改Tomcat的配置,则只能将其部署到另一个Tomcat中。因此,我想写一下如何使用IDEA + Spring Boot创建WAR文件,并将其部署到另一个Tomcat上以使其运行的步骤。
前提 tí)
-
- 環境はもろもろ揃っているものとします。
-
- 以下の公式を参照しています。
- http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file
创建项目的模板
-
- フレームワークを作る
-
- 以下のサイトを参照しています。
-
- https://start.spring.io/
- ※DependenciesにThemleaf、MyBatisを追加します。
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<groupId>mjsss</groupId>
<artifactId>MaJisss</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MaJisss</name>
<description>Personal Website</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>11</java.version>
<mybatis.version>3.5.0</mybatis.version>
<mybatis-spring.version>2.0.0</mybatis-spring.version>
<spring-boot.version>2.1.3.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<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>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Mybatis start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- Mybatis end -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- Themleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
需要注意的是以下两个要点:
– 将“war”指定为包装方式。
– 将Tomcat的库范围指定为“provided”。
Application.java的实现
package mjsss.com.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args){
SpringApplication.run(MaJisssApplicatiom.class, args);
}
}
在这里,重要的是以下两点。
-
- SpringBootServletInitializerクラスを継承すること
- configureメソッドをoverrideすること
创建index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home Page</title>
<meta name="description" content="Home Page">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link th:href="@{/bootstrap/css/bootstrap.css}" rel="stylesheet"/>
<script type="text/javascript" th:src="@{/jQuery/jquery.js}"></script>
<style>
</style>
</head>
<body>
<table style=" position: fixed; top: 25%;left: 40%; border: 2px">
<tr></tr>
<tr class="form-group">
<td>
<label>Name</label>
</td>
<td>
<input type="text" class="form-control" placeholder="user name">
</td>
</tr>
<tr class="form-group">
<td>
<label>Email</label>
</td>
<td>
<input type="email" class="form-control" placeholder="example@example.com">
</td>
</tr>
<tr class="form-group">
<td align="middle" colspan="2">
<button type="submit" class="btn btn-success">Send invitation</button>
</td>
</tr>
</table>
</body>
</html>
在使用Thymeleaf的情况下,应该将index.xml文件放在resources>templates文件夹中。
创建一个控制器
package mjsss.com.java.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("index")
public class HomePageController {
@GetMapping
public String hello() {
return "index";
}
}
创建Maven WAR文件

过一会儿,项目根目录的target文件夹中会创建一个WAR文件。
这次创建的文件名是MaJisss-0.0.1-SNAPSHOT.war。
[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ MaJisss ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.026 s
[INFO] Finished at: 2019-04-22T22:18:22+09:00
[INFO] Final Memory: 31M/120M
[INFO] ------------------------------------------------------------------------
部署到另一个Tomcat
关于这个问题,其实很简单。
把已经完成的war文件放置在想要部署的Tomcat的webapps目录下。
然后启动Tomcat即可。
在另一个Tomcat上进行部署的应用程序的运行确认。
我现在要在这里进行操作确认。
http://localhost:8080/MaJisss-0.0.1-SNAPSHOT/index
只要在浏览器上显示为“登录页面”,就可以了。
这里有两个重要的点。
过去的源代码可以从Git上获取。
https://github.com/Mjsss/SpringBoot-Mybatis