Spring Boot – 使用 Tomcat 部署项目
Spring Boot 是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。如今,它正成为开发人员的最爱,因为它是一个快速可用于生产的环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置。
Tomcat 是一个非常流行的 Java Servlet 容器。Tomcat 是默认的 Spring Boot 服务器,它可以在同一个应用程序中管理多个应用程序,从而避免在单个应用程序中为每个应用程序进行多次设置。
在本文中,我们将创建一个简单的 Spring Boot 应用程序,其中我们将使用 Tomcat 服务器部署该应用程序。
Spring Boot 上的项目部署流程
在 Tomcat Server 上部署 Spring Boot 应用程序涉及三个步骤:
- 创建示例 Spring Boot 应用程序
- 创建 Spring Boot WAR 的方法
- 将 WAR 部署到 Tomcat – 最好需要更高版本的 Tomcat。
步骤 1:为 Tomcat 创建示例 Spring Boot 应用程序
这是一个 Spring Boot Web 应用程序项目,即需要将项目部署到 Tomcat 上。该项目可以创建为基于 Maven 的项目,因此我们可以在 pom.xml 文件中指定所需的依赖项。
pom.xml->Configurations can be specified in a Maven project via pom.xml
由于项目需要使用 Tomcat 部署,因此必须将其打包为“WAR” ( Web 应用程序资源或 Web 应用程序存档)。
基本上,pom.xml 应该具有与 spring boot 相关的依赖项,例如
- spring-boot-starter-parent
- spring-boot-starter-web
- spring-boot-starter-tomcat 及其范围设置为提供“geeks-web-services”应该是 pom.xml 中“WAR”文件的名称
示例 1:
- 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.geeksforgeeks</groupId> <artifactId>spring-boot-war-deployment-example-on-tomcat</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- As we need to deploy the project as WAR, this is needed --> <packaging>war</packaging>
<name>SpringBootWarDeploymentOnTomcatServer</name> <description>Demo project for Spring Boot deployable on Tomcat</description>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.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> </properties> <dependencies> <!-- Spring web dependency --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Servlet container has to be set as provided --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
<build> <!-- Our final war file name is geeks-web-services --> <finalName>geeks-web-services</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
</build>
</project> |
需要一个控制器类,通过它我们能够以 GET 方法或 POST 方法调用服务。作为示例,让我们看“SampleRestControllerExample.java”,它包含两个“ GET ”方法
编写了两种方法,提供静态文本作为输出。
由于这是一个简单的例子,我们只需展示一下调用“geeks-web-services/hello”时显示的内容,Hello Geek,这是一个简单的问候消息,祝您有个美好的一天。
调用“geeks-web-services/greet”时显示Hello Geek,通过减少源代码,可以快速轻松地开发基于Spring的应用程序。
@RestController 是控制器的专门版本。它包括 @Controller 和 @ResponseBody 注释,从而简化了控制器实现。
示例 2: SampleRestControllerExample.java
- Java
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;
// Annotation @RestController // Class public class SampleRestControllerExample { @GetMapping("/hello") // Easy method just to print encouraging and consoling // words public String hello() { return "Hello Geek, this is a simple hello message to take care and have a nice day."; }
@GetMapping("/greet") // Easy method just to print greeting message by saying // spring-based applications public String greet() { return "Hello Geek, Fast and easy development can be possible on Spring-based applications by reducing source code;."; } } |
第 2 步:创建 Spring Boot WAR 的方法
创建 Spring Boot WAR 有 3 种方法:
- “Main” 类应该包含主类中的“extends SpringBootServletInitializer” 类。
- “嵌入式 servlet 容器应标记为已提供。
- 打包应该是 WAR
SpringBootWarDeploymentOnTomcatServer.java 是我们的主类
例子:
- Java
// Java Program to Illustrate SpringBoot WarDeployment // On Tomcat Server
// Importing required classes 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; // Annotation @SpringBootApplication
// Class public class SpringBootWarDeploymentOnTomcatServer extends SpringBootServletInitializer { @Override // Configuring method has to be overridden protected SpringApplicationBuilder configure(SpringApplicationBuilder application){ return application.sources( SpringBootWarDeploymentOnTomcatServer.class); }
// Method 2 // Main driver method public static void main(String[] args){ SpringApplication.run( SpringBootWarDeploymentOnTomcatServer.class, args); } } |
我们可以使用命令行运行 Maven 步骤,
mvn clean install -X
让我们通过图像来看一下项目结构和目标文件夹:
当WAR文件创建成功后,控制台中会显示WAR文件路径以及“BUILD SUCCESS”的信息,如下图所示:
WAR 文件已创建
步骤 3:将 WAR 部署到 Tomcat
如果之前没有安装Apache Tomcat Server,则必须安装。最好使用更高版本的 tomcat。例如,我们使用 tomcat 版本 9.0.x。
要使用合适的 tomcat 版本和 java 版本,检查HTML 文件会很有帮助。在上一步中,我们得到了“geek-web-services.war”,必须将其复制到 tomcat 的“webapps”文件夹下。
现在,打开命令提示符并指向 tomcat 位置的 bin 文件夹,
需要从 bin 文件夹提供“startup.bat”
该图显示 Spring Boot 已启动
而且我们的 war 文件也部署在 tomcat 中。下面的截图证实了这一点:
geek-web-services war 文件已部署
我们可以通过在浏览器中执行以下 URL 来测试相同内容:
geek-web-services/hello 输出
第二个输出:
geek-web-services/greetoutput
最后:
如上所述,Spring Boot 项目可以在 Tomcat 中部署。请记住以下列出的一些要点:
- 默认情况下,Spring Boot 1.4.4.RELEASE 需要 Java 7 和 Spring Framework 4.3.6.RELEASE 或更高版本
- 更高版本的Tomcat将有助于部署spring-boot应用程序。