文章标题:SpringBoot2.3新特性分层JAR的使用
一、前言
在 2.3 版本发布之后,SpringBoot 推出了一个新特性——分层 JAR(Layered JAR)。本文将详细介绍分层 JAR 的概念,用法和示例。
二、概念
在过去,当你用 SpringBoot 来打包应用程序时所得到的 JAR 文件中包含了所有的类,依赖和资源。虽然这种方式简单易用,但是当我们需要在 Kubernetes 或 Docker 等环境下运行的时候,却需要承受一些额外的负担。比如在获取容器镜像的时候,需要下载整个 JAR 文件,这样可能会影响启动速度。
为了解决这个问题,SpringBoot 推出了一个新特性——分层 JAR。所谓分层,就是将 JAR 文件进行拆分,划分为独立的层,每一层都包含不同类型的资源。
三、用法
SpringBoot 官方文档上有一句话:“生产环境中的分层 JAR 定制通常是在 Maven 或 Gradle 里配置 plugin 来完成的”。从这句话可以看出,我们需要使用插件来生成分层 JAR。
- 修改 Maven 配置文件 pom.xml
<project>
...
<packaging>jar</packaging>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<repackage>
<classifier>exec</classifier>
<enabled>true</enabled>
<layers>
<enabled>true</enabled>
</layers>
</repackage>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
修改 pom.xml 文件后,在命令行中输入 mvn clean install
运行 Maven 命令就可以生成打包文件。
- 查看生成的分层 JAR
生成的分层 JAR 文件名称为 *-exec.jar
,可以通过 jar -tf
命令查看文件内容。
$ jar -tf target/demo-0.0.1-SNAPSHOT-exec.jar
# 输出结果:
org/
org/springframework/
org/springframework/boot/
...
spring-boot-loader/
spring-boot-loader/...
demo-0.0.1-SNAPSHOT.jar
xanadu/
xanadu/altium/
xanadu/altium/demo/
xanadu/altium/demo/service/
xanadu/altium/demo/service/DemoService.class
通过上述命令可以看出,生成的分层 JAR 文件包含两层。demo-0.0.1-SNAPSHOT.jar
包含了应用的所有类和资源(第一层),spring-boot-loader
包含了 SpringBoot 启动类和其他资源(第二层)。
四、示例
下面,我们通过两个简单的示例来演示分层 JAR 的使用。
示例 1:生成 Docker 镜像
需求: 我们需要将 SpringBoot 应用打包成 Docker 镜像,并在 Kubernetes 上运行。
步骤: 下面是打包 Docker 镜像的步骤:
1. 生成分层 JAR
$ mvn clean install
2. 编写 Dockerfile
FROM openjdk:8-jdK-alpine
MAINTAINER me@abc.com
COPY target/demo-0.0.1-SNAPSHOT-exec.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
3. 构建 Docker 镜像
$ docker build -t demo:latest .
4. 运行镜像
$ docker run -d -p 8080:8080 demo:latest
5. 验证
在浏览器中访问 http://localhost:8080
进行验证。
示例 2:应用更新
需求: 对 SpringBoot 应用进行更新后,我们需要将更新后的应用重新打包,并在运行中的容器上进行更新。
步骤: 下面是更新 SpringBoot 应用的步骤:
1. 更新应用并重新打包
2. 将 jar 包复制到运行中的容器内
$ docker cp target/demo-0.0.1-SNAPSHOT-exec.jar mycontainer:/app.jar
3. 更新容器内的应用
首先需要查看容器的 ID:
$ docker ps
然后执行下面的命令进行更新:
$ docker exec <container-id> java -jar /app.jar
4. 验证
在浏览器中访问 http://localhost:8080
进行验证。
五、结语
本文介绍了分层 JAR 的概念,用法和示例。如果你想深入了解分层 JAR,可以参考 SpringBoot 官方文档的详细说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot2.3 新特性分层JAR的使用 - Python技术站