目录

  • 1,什么是瘦身?
  • 2,为什么要瘦身?
  • 3,如何瘦身?
    • 3.1,瘦身思路:
    • 3.2,瘦身方法
  • 4,瘦身后运行

1,什么是瘦身?

瘦身:thinBody,又称“减肥”、“减重”,就是合理,科学的减轻自身重量。Spring Boot应用瘦身顾名思义就是:将Spring Boot应用打包后的jar包,利用合理的方式,方法减小体积。

2,为什么要瘦身?

场景: 当前后端开发大部分都是采用Spring Boot作为底层架构,在前后端分离的方式下,后端项目最终都是打包成jar包来部署。因为项目中通常会引入各种的依赖,所以打成的jar包体积都是比较大的(百M左右),如果项目还是微服务分布式的,好几个项目加起来能达到GB,部署升级时会比较麻烦。
痛点: 项目上线后要升级,各个项目打包后加起来好几个G,运维老哥收到后肯定吐槽:“这么多包,要上传到什么时候”,尤其当带宽小,每秒上传几KB,运维老哥当场奔溃。
那么有什么办法可以减小jar包体积呢?

3,如何瘦身?

3.1,瘦身思路:

项目=code+dependency,code是我们编写的代码,这部分是升级必须的,新的功能就是在这里实现的,那dependency呢?
比如我们在项目中引入了操作数据库所需的依赖,例如MyBatis,Mysql等,我们在升级的时候这部分依赖还需要升级吗?明显不需要,那我们就可以想办法,使每次升级时只升级新的业务代码。
注意:在第一次部署时,我们还是要上传所有的代码和依赖,在之后的升级时,就可以只上传业务代码,如果有新增的依赖,也只需要将新增的依赖上传即可。

3.2,瘦身方法

这里需要借助一个插件来实现,首先来看一下不用插件时我们的jar,可以看到jar总大小是73.7M,jar包中的lib目录下是我们引入的各种依赖。

在项目的pom.xml中引入如下插件:

<!-- build 标签:用来配置对构建过程的定制 --><build><!-- plugins 标签:定制化构建过程中所使用到的插件 --><plugins><!-- plugin 标签:一个具体插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.1</version><configuration><mainClass>com.tick.tack.TickTackApplication</mainClass><!--解决Windows命令行窗口中文乱码--><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><layout>ZIP</layout><!--配置需要打包进项目的jar--><includes><!--这里是填写需要包含进去的jar,比如是项目中某些我们自己编写的common模块(假如项目是个多模块的项目),会经常变动,那么就应该将其坐标写进来如果没有则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><!--将依赖拷贝到项目构建目录的lib下--><outputDirectory>${project.build.directory}/lib</outputDirectory><!--是否排除传递性--><excludeTransitive>false</excludeTransitive><!--是否去掉jar包版本信息--><stripVersion>false</stripVersion><!--包含范围:拷贝运行时的依赖,例如测试的就不需要了--><includeScope>runtime</includeScope></configuration></execution></executions></plugin></plugins></build>

再次打包可以看到项目结构如下所示:

原先大的jar包被分成了两部分,lib下是依赖的包,web-server-1.0-20230323.jar是我们自己的业务代码。

4,瘦身后运行

瘦身后的项目结构发生了变化,在启动时也有变动

java -jar -Dloader.path=./lib web-server-1.0-20230323.jar

Spring Boot项目瘦身相关推荐

  1. Spring Boot 项目瘦身指南,瘦到不可思议!129M->1.3M

    之前在 从使用传统Web框架到切换到Spring Boot后的总结 中提到关于 Spring Boot 编译打包,Spring Boot 应用程序不用额外部署到外部容器中,可以直接通过 Maven 命 ...

  2. Spring Boot 项目瘦身指南,非常实用!

    一.前言 Spring Boot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(Spring Clo ...

  3. Spring Boot 项目瘦身指南,瘦到不可思议!

    https://blog.csdn.net/yjgithub/article/details/80475521 目录: 前言 瘦身前的 Jar 包 解决方案 一.前言 SpringBoot 部署起来虽 ...

  4. Spring Boot Gradle 瘦身打包 thinJar,分离 lib jar 依赖

    原文地址:weiku.co/article/135/ ,欢迎转载 需求背景: srping boot 2.0+ 打包生产的 fat jar 虽然部署起来很方便,但将所有依赖都打包到一个 jar 包中使 ...

  5. Vue + Spring Boot 项目实战(二十一):缓存的应用

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.缓存:工程思想的产物 二.Web 中的缓存 1.缓存的工作模式 2.缓存的常见问题 三.缓存应用实战 1.Redis 与 ...

  6. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  7. 将Spring Boot项目打包成jar包war包

    任务一:将Spring Boot项目打包成jar包 1.在pom.xml文件中添加依赖 2.通过cmd命令行来进行打包jar包(首先进入项目的目录中) 3.进入项目中的target目录下查看包 4.使 ...

  8. 怎样使用Spring Boot项目的单元测试

    在实际开发中,每当完成一个功能接口或业务方法的编写后,通常都会借助单元测试验证该功能是否正确.Spring Boot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件中添加 ...

  9. IDEA 2019 生成Spring Boot项目,编写第一个Hello World程序,并打包成jar

    IDEA集成了生成Spring Boot项目的功能,不需要你去 start.spring.io 上下载,使用方法如下: 新建项目,选择Spring Initializr: 然后点NEXT: 勾选需要的 ...

最新文章

  1. 仅支持BCH的众筹平台Coinfundr或能革新众筹业
  2. Android-MeasureSpec那些事
  3. MOPSO 多目标粒子群优化算法
  4. android 自定义MP4播放器
  5. 一次完整的http的请求过程与https的实现
  6. Redis 集群搭建和简单使用
  7. php绘制时钟刻度,怎么用canvas写钟表刻度的时钟和分钟
  8. mysql开启profiling
  9. 译]bootstrap-select (selectpicker)方法
  10. Ubuntu 18.04 Server必须使用netplan命令配置IP地址
  11. 2020国际机器翻译大赛:火山翻译力夺五项冠军
  12. c#代码片段新建(sinppet)
  13. Django url管理之include
  14. RSA加密算法中的数学原理
  15. 手写文字识别的使用软件
  16. Linux常用命令--解压缩
  17. android学习笔记之——获取SD卡及手机ROM容量
  18. android 图片占用内存的计算
  19. Best Time to Buy and Sell Stock I II III IV (第四周 动态规划)
  20. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

热门文章

  1. 2019武大国重考研地理信息(GIS,资源与环境)复试上机题目分享
  2. 如何保留5个有效数字输出c不4舍5入_社群运营:6个步骤教会实体店系统搭建被动式引流,变现社群...
  3. 理解加密资产中的验证者两难
  4. CDH 安装 sqoop
  5. Know vag com cables
  6. 【近似最近邻搜索】在茫茫点集中,怎么找到你的邻居
  7. PDD 7.28秋招笔试题
  8. linux 最漂亮的系统,最漂亮的Linux操作系统诞生——Deepin 20
  9. 发光二极管的发光原理
  10. 【第一阶段 day23 面向对象】构造方法 构造代码块与局部代码块 this