前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次将Springboot打包瘦身

记录一次将Springboot打包瘦身

作者头像
JokerDJ
发布2023-11-27 09:08:57
4400
发布2023-11-27 09:08:57
举报
文章被收录于专栏:JokerDJ

1. 什么是瘦身

瘦身: thinBody 又称 "减肥"、"减重"。 就是合理、科学的减轻自身重量的。SpringBoot 应用瘦身顾名思议:就是将 SpringBoot 应用打包的 jar 利用合理的方式、方法减小体积。

2. 为什么瘦身

场景: 现有的应用开发中,不论是单体架构、微服务架构,如果项目采用的是 SpringBoot、SpringCloud 来作为底层框架,打包时最终都会以jar包的方式打包、部署。这就会面临一个问题,Jar 包非常大时,单体应用还好,但是如果是微服务就非常痛苦,几十个微服务就要拆分打包几十个 Jar 包,每个 Jar 包都很大(几百M),合起来就好几个 GB,非常占用空间。如果是内网部署,遇到动辄GB的升级包还能勉强接受,最多就是运维心里默默地吐槽一下,但是如果在外网云环境、或者客户现场,那令人痛不欲生的带宽加上各种网络转换限制,运维心里各种🐴。因为这个你的领导又给你各种批头盖脸一顿,你觉得很委屈😢,确实不是你的代码问题,但是这确实是我们该考虑的。因此呢?基于以上原因我们要为项目进行瘦身!

3. 如何瘦身

微服务中,每一个工程都会依赖很多个Jar包,如果将依赖单独抽出进行引用,会大大减少依赖的冗余,减少程序包的大小,从而做到代码与依赖分离。

没有瘦身之前的效果

引入Maven插件

代码语言:html
复制
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.1</version>
                <configuration>
                    <mainClass>com.software.SoftWebApiApplication</mainClass>
                    <!--解决windows命令行窗口中文乱码-->
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <layout>ZIP</layout>
                    <!--配置需要打包进项目的jar-->
                    <includes>
                        <!--这里是填写需要包含进去的jar,
                        	必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来
                        	如果没有则non-exists ,表示不打包依赖
                        -->
                        <include>
                            <groupId>non-exists</groupId>
                            <artifactId>non-exists</artifactId>
                        </include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- 此插件用于将依赖包抽出-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
  													<!--是否排除传递性-->
                            <excludeTransitive>false</excludeTransitive>
                            <!--是否去掉 jar 包版本信息-->
                            <stripVersion>false</stripVersion>
                            <!--包含范围-->
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

引入完依赖后在此打包查看

如何运行

代码语言:java
复制
java -jar -Dloader.path="/lib" xxx-.jar

-Dloader.path="/lib" 指的是抽出依赖的绝对路径

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是瘦身
  • 2. 为什么瘦身
  • 3. 如何瘦身
  • 没有瘦身之前的效果
  • 引入Maven插件
  • 如何运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档