Spring Boot应用的JAR与WAR打包部署

在之前的笔记中,讨论了Spring Boot和JAR部署。本文将探索如何将Spring Boot应用打包成JAR和WAR包,并且使用单一实现。通常情况下,使用Spring Boot时,可能会将项目打包成JAR。但如果想使用servlet容器,同样可以实现。

项目结构

"spring-boot-example-implementation"是一个Maven项目,包含了Spring Boot应用的所有实现;"spring-boot-example-jar-package"没有自己的源代码,它的职责是将应用打包成可执行的JAR包;"spring-boot-example-war-package"同样没有自己的源代码,它的职责是将应用打包成WAR包,以便部署到servlet容器,如Tomcat。这三个项目共享同一个父POM项目"spring-boot-example",它为所有子项目提供通用的基本配置。

父POM配置

"spring-boot-example"是一个简单的POM项目,声明了三个模块级别的项目,并配置了编译器以Java 1.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"> <properties> <spring-boot.version>1.5.7.RELEASE</spring-boot.version> </properties> <modelVersion>4.0.0</modelVersion> <groupId>com.song.example</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1</version> <packaging>pom</packaging> <modules> <module>spring-boot-example-implementation</module> <module>spring-boot-example-jar-package</module> <module>spring-boot-example-war-package</module> </modules> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration><source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>

实现项目配置

"spring-boot-example-implementation"的POM如下所示。

<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>com.song.example</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1</version> </parent> <artifactId>spring-boot-example-implementation</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> </dependency> </dependencies> </project>

JAR打包项目配置

"spring-boot-example-jar-package"项目没有源代码。它所做的就是将"spring-boot-example-implementation"项目打包成一个可执行的JAR文件,可以部署它。

<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>com.song.example</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1</version> </parent> <artifactId>spring-boot-example-jar-package</artifactId> <properties> <start-class>com.song.web.boot.ApplicationStart</start-class> </properties> <dependencies> <dependency> <groupId>com.song.example</groupId> <artifactId>spring-boot-example-implementation</artifactId> <version>0.0.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.song.web.boot.ApplicationStart</mainClass> </configuration> <executions> <execution> <goals><goal>repackage</goal></goals> </execution> </executions> </plugin> </plugins> </build> </project>

WAR打包项目配置

"spring-boot-example-war-package"项目没有源代码。它所做的就是将"spring-boot-example-implementation"项目打包成一个WAR文件,可以部署到servlet容器。

<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>com.song.example</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1</version> </parent> <artifactId>spring-boot-example-war-package</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.song.example</groupId> <artifactId>spring-boot-example-implementation</artifactId> <version>0.0.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>${spring-boot.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>

调试和运行

如果将项目加载到Eclipse中,可以直接在"spring-boot-example-implementation"项目上运行或调试应用程序。在"spring-boot-example-jar-package"项目中,可以使用以下命令启动应用程序。

mvn spring-boot:run

Maven构建成功后,可以使用以下命令启动JAR文件。

java -jar target/spring-boot-example-jar-package.jar

如果愿意,也可以在Eclipse中通过Tomcat服务器附加"spring-boot-example-war-package"来运行和调试应用程序。当然,需要测试将WAR文件部署到独立的servlet容器。已经在独立的Tomcat服务器上测试了WAR。

部署和端口配置

当以JAR方式启动应用程序时,它监听的端口号是"8090"。端口号配置在"spring-boot-example-implementation"项目中。可以查看之前的笔记了解详细信息;当以WAR方式启动应用程序时,Tomcat不会使用这个端口号。它将监听自己的端口号。在情况下,它是"8080"。

访问结果

以下是从浏览器访问托管在Tomcat上的应用程序时的结果。

这是一篇关于Spring Boot和JAR与WAR部署的笔记;

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485