Spring Boot – 包装
创建 Spring 框架是为了提供一个开源应用程序框架,以便为开发Java应用程序提供更好的基础架构支持。它是最流行的Java企业版 (Java EE) 框架之一,Spring 框架帮助开发人员使用普通的旧Java对象 (POJO) 创建高性能应用程序。但是使用 Spring 是一个繁琐的过程,因为我们必须手动管理它的配置。这里出现了 Spring-Boot,它的主要功能是自动配置,旨在简化应用程序开发过程。此外,Spring Boot 基本特性的核心是它的打包特性。
Pre-requisites:
- All packaging types are suitable for their respective different constraints.
- Therefore, you should the respective packaging type which is better for your application’s constraints.
Spring Boot 应用打包的重要性
- Spring Boot 的打包功能有助于管理应用程序,其模块对于应用程序部署也很重要。
- Maven 和 Gradle 是 Spring 和 Spring Boot 支持的最常用的包管理技术。
- 他们都提供了各自的插件,这些插件实际上可以打包——(Spring Boot Maven 插件/Spring Boot Gradle 插件)。
- 它们确保所有依赖库都包含在可执行 JAR 文件中并在运行时类路径中可用。
- Spring Boot Maven 插件允许开发人员打包可执行的 jar 或 war 档案,同时运行应用程序。 Spring 提供嵌入式容器支持。
- 它还为我们提供了排除依赖项的选项,以避免在外部容器中部署时潜在的 jar 冲突。
- 它还有助于在不使用 jar 命令 ( Java -jar) 的情况下独立运行“jar”文件。
Spring Boot 中的封装类型
- 罐
- 战争
- 绒球
- 耳朵
1. JAR 包装
- JAR 代表Java存档。
- 它封装了一个或多个Java类(EJB – Enterprise Java Beans)、一个清单和一个描述符(例如 – XML 文件),称为 JAR 文件。
- 它的扩展名是'.jar'
- 它是最底层的包装。
- JAR 是用于打包库( Java类和元数据)和偶尔的桌面 UI 应用程序的传统打包方式。
- 在 Spring Boot Applications 中,“jar”是部署在 Spring 的嵌入式服务器中的默认打包。
- 在这里,JAR 封装的选择是有云意识的选择。
- 所有Java云平台都能够运行可执行的 JAR 文件。
- 因此,'Spring Initializr' 使 JAR 打包成为默认设置,除非您告诉它不这样做。
- 如果您正在构建一个可执行的 JAR 文件,您必须选择以下任何一种:Thymeleaf、FreeMarker、Groovy 模板、JSP Java Server Pages、Mustache。
- Spring Boot Maven 插件在 JAR 文件中生成一个清单文件,该文件将引导类作为可执行 JAR 的主类。
- 使用 mvn 包构建应用程序后(右键单击项目 -> 运行方式 -> Maven Build 或 Maven Clean ),将在“目标”文件夹中创建应用程序的“.jar”文件。
- 运行“.jar”文件后,您可以发出请求,例如 - http://localhost:8080/method mapping...
- 由于 jar 是默认的,因此您不需要在 pom.xml ( Maven build ) 中包含包装标签。
- 示例 – pom.xml
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.4
sia
Geeks
0.0.1-SNAPSHOT
Geeks
GFG
11
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
Java
package gfg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GfgWebApplication {
public static void main(String[] args) {
SpringApplication.run(GfgWebApplication.class, args);
}
}
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.3
sia
GFG
0.0.1-SNAPSHOT
war
GFG
GeeksforGeeks
11
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-maven-plugin
Java
package gfg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class GfGApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GfGApplication.class, args);
}
}
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.3
sia
ParentGFG
0.0.1-SNAPSHOT
pom
ParentGFG
Multi Module Project
11
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
GFG-Module1
GFG-Module2
Note:
- Your application must have a main class that will be executed when the JAR file is run.
- You will also need a minimal amount of Spring Configuration for bootstrapping the application.
示例 – GfgWebApplication。 Java ( 主类 - Spring Boot 应用程序的引导)
Java
package gfg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GfgWebApplication {
public static void main(String[] args) {
SpringApplication.run(GfgWebApplication.class, args);
}
}
2. 战争包装
- WAR 代表 Web 存档。
- 传统的Java Web 应用程序被打包为 WAR 文件。
- WAR 文件非常适合部署到传统的Java应用程序服务器。
- 一些云平台(例如 CloudFoundry)能够部署和运行 WAR 文件。
- 您需要在 pom.xml – Maven 构建文件中包含“
war ”。 - Web 模块包含 servlet 类、JSP 文件、HTML 文件、JavaScripts 等,它们被打包为带有 .war 扩展名的 JAR 文件。
- 它包含一个名为 WEB-INF 的特殊目录。
- Java servlet 容器——包括嵌入式 Tomcat 和 Jetty 容器——通常在 /WEB-INF 下的某处寻找 JSP。
- 但是,如果您将应用程序构建为可执行 JAR 文件,则无法满足该要求。
- 因此,在使用 WAR 打包时,您只需要在应用程序的网页中使用 JSP( Java服务器页面)。
示例 – pom.xml (Maven)
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.3
sia
GFG
0.0.1-SNAPSHOT
war
GFG
GeeksforGeeks
11
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-maven-plugin
Note: When you choose WAR packaging for application deployment to a traditional Java application server, you need to include a web initializer class.
示例 – GfGApplication。 Java (主类 - 应用程序的引导)
Java
package gfg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class GfGApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GfGApplication.class, args);
}
}
使用 WAR 包装–
- 为了构建我们的 Tomcat 可部署 WAR 应用程序,我们执行 mvn 包(右键单击项目 -> 运行方式 -> Maven Build 或 Maven Clean )。
- 刷新后,我们的WAR文件生成在target/________.war
- 将我们的 WAR 文件从 target/________.war 复制到 tomcat/webapps/
- 从终端导航到 tomcat/bin 文件夹并执行 - catalina.bat run(在 Windows 上), catalina.sh run(在基于 Unix 的系统上)。
- 进入http://localhost:8080/'.war文件名'/方法映射
3. POM 包装
- 我们可以使用 Spring Boot 将应用程序作为多模块项目。
- 在多模块项目中,一个应用程序被划分为多个模块,每个模块在应用程序的某些功能中扮演着重要的角色。
- 一个模块可以被认为是一个独立的项目或子项目。
- 这些模块还与其他模块协调。
- 因此我们需要借助 pom 打包来管理它们。
- pom 打包充当其他子模块的容器,这些子模块本身被打包在 jar 或 war 文件中。
- pom 包装可以具有具有不同包装的子模块。
- 您需要在 pom.xml 文件中包含“
pom ”。 - 它们被声明并列在“模块”标签中。
示例 – pom.xml (Maven)
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.3
sia
ParentGFG
0.0.1-SNAPSHOT
pom
ParentGFG
Multi Module Project
11
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
GFG-Module1
GFG-Module2
4. EAR 包装
- EAR 代表企业档案。
- 它的文件有一个“.ear”扩展名。
- 它可以包含多个 EJB – Enterprise Java Beans 模块 (JAR) 和 Web 模块 (WAR)。
- 它是一个特殊的 JAR,在 META-INF 文件夹中包含一个 application.xml 文件。