给 Spring Boot 项目减减肥!18.18M 到 0.18M 是如何做到的?
点击上方“方志朋”,选择“设为星标”
回复”666“获取新整理的面试文章
作者 | yjgithub
来源 | http://suo.im/5OOWQy
一、前言
SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud等),那就更大了。
这个时候如果想要对线上运行工程有一些微调,则非常痛苦
二、瘦身前的Jar包
Tomcat在部署Web工程的时候,可以进行增量更新,SpringBoot也是可以的~
SpringBoot编译出来的Jar包中,磁盘占用大的,是一些外部依赖库(jar包),例如:
进入项目工程根目录,执行 mvn clean install 命令,得到的Jar包,用压缩软件打开,目录结构如下:
整个Jar包 18.18 MB, 但是 BOOT-INF/lib 就占用了将近 18 MB:
三、解决方法
步骤1: 正常编译JAR包,解压出lib文件夹
POM文件如下:
进入项目根目录,执行命令:mvn clean install
将编译后的Jar包解压,拷贝 BOOT-INF 目录下的lib文件夹 到目标路径;
步骤2: 修改pom.xml配置,编译出不带 lib 文件夹的Jar包
配置完成后,再次执行编译:mvn clean install
生成的 Jar 包体积明显变小,如下所示, 外部的 jar 包已经不会被引入了:
步骤3: 运行编译后的Jar包
将 步骤1 解压出来的lib文件夹、步骤2编译的jar包放在同一个目录, 运行下面命令:
或者在maven中输入一下命令导出需要用到的jar包
备注:
将/path/to/改成实际的路径。
-Dloader.path=lib文件夹路径
最终目录文件结构是:
说明
1、通常,一个工程项目架构确定后,引入的jar包基本上不会变,改变的大部分是业务逻辑;
2、后面如果需要变更业务逻辑,只需要轻量地编译工程,大大提高项目部署的效率。
热门内容:为什么像王者荣耀这样的游戏 Server 不愿意使用微服务?为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?Spring Boot+JWT+Shiro+MyBatisPlus实现Restful快速开发后端脚手架
浅析 VO、DTO、DO、PO 的概念、区别和用处!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
给 Spring Boot 项目减减肥!18.18M 到 0.18M 是如何做到的?相关推荐
- Spring Boot-Spring Tool Suit + Gradle 构建第一个Spring Boot 项目02
概述 将工程托管到Github Gradle构建 为什么一个main函数就能启动web并提供这么多功能 幕后的 Spring Boot 分发器和 multipart 配置 视图解析器.静态资源以及区域 ...
- 在IntelliJ IDEA里创建Spring Boot项目
IntelliJ IDEA是非常流行的IDE,IntelliJ IDEA 14.1已经支持Spring Boot了! 要在IntelliJ IDEA里创建新的Spring Boot应用程序,在File ...
- STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)
STS创建Spring Boot项目实战(Rest接口.数据库.用户认证.分布式Token JWT.Redis操作.日志和统一异常处理) 1.项目创建 1.新建工程 2.选择打包方式,这边可以选择为打 ...
- springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) 针对图中所示的 ...
- Jenkins部署spring boot项目
本文介绍使用Jenkins自动打包发布spring boot项目,我们在没有使用持续集成工具的情况下,开发好的spring boot项目,通过maven打包,上传jar包到服务器上,通过java -j ...
- 从服务器基础环境配置到搭建Docker+Gitlab+Gitlab Runner,完整介绍Spring Boot项目的持续集成与持续交付具体实现!
1. 序言 在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多.另外,在当下的热门技术栈中,微服务开发模式.前后端分离开发模式逐渐盛行,Spring Boot.VU ...
- Vue + Spring Boot 项目实战(十五):动态加载后台菜单
重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...
- Spring Boot项目学习之通用权限管理项目01
权限管理系统是一个十分常见的系统,在这个系统中是基于角色访问控制的,用户是通过角色与权限进行关联.换句话说,就是一个用户拥有若干个角色,每一个角色拥有若干权限,这样就可以形成一个关系模型:用户-角色- ...
- Spring Boot 项目结构介绍
POM文件 <!-- 父工程 --><parent><groupId>org.springframework.boot</groupId><art ...
最新文章
- PAT Basic 1072
- 国庆七天乐——第一天
- ArcGIS Engine空间高效查询(IIdentify方法)
- 四、spring中高级装配(2)
- nodejs因buildpack指定不当部署到CloudFoundry后出的一个错误
- 丁力 | cnSchema:中⽂知识图谱的普通话
- 这张磁盘有写保护_架构师不得不了解的硬件知识 - 磁盘阵列RAID
- Python | 重命名现有文件(os.rename()方法的示例)
- discuz的ajax,discuz分页函数改成基于jqueryd的ajax分页函数
- python实用代码
- 2022考研数据结构_1 绪论
- MySql练习题大全(带答案)-练习完啥都会了
- adb与java端口冲突,如何解决adb devices 端口被占用的问题zz
- STM8单片机STVD环境新建工程笔记
- python wilcoxon test_自动化框架之 python+selenium+pytest · TesterHome
- PiaolinPlatformV2.0.0 - 获取手机或电脑GPS位置信息(定位平台)
- java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)
- 使用指针实现strcpy函数的功能
- AR镜头下的时尚潮流,谁正成为弄潮儿?
- windows 命令提示符 修改/prompt