背景
SpringCloud 的微服务架构的应用程序发布时,多个模块可能会统一部署在一台主机上,那么就面临引用依赖过多,部署包介质过大,占用磁盘空间过多,下载耗时、更新麻烦等问题。
连续对两个项目进行依赖包整理后,本文将总结多模块单机部署时瘦身包整理的基本思路。
分析依赖包
首选,模块瘦身打包。 各模块依赖的包单独打到特定目录,编写脚本打印出各模块的依赖。
其次,找出所有模块都共有的包。 Shell 计算交集感觉有点复杂,简单的方法是用 Java 的集合来计算,用第一步打印的各模块的依赖文件,Java 读取文件到列表后走集合的 retainAll
计算出公共文件。
第三步,其他纯功能的依赖包抽取到一起。 在用 Shell 将各个模块的纯功能的 jar ,如 commons-lang、mybatis、okhttp、Spring-Cloud 等依赖移动到特定公共目录中。
第四步,启动参数配置。 按各模块的引用情况,调整启动脚本,加上 -Dloader.path
参数,注意,它不能与 Java 的自身的参数 -Djava.ext.dirs
一起用,因为是冲突的。
第五步,启动脚本支持输出控制台日志。
启动脚本参数控制,测试的时候就可以看到启动问题了;生产的时候关闭控制台日志,减少磁盘空间的浪费。
微服务项目实践总结
瘦身包部署,最重要的是依赖包的版本统一,最好能在项目搭建的时候就统一在父工程中统一管理版本,保证各模块中相同库的版本一致,这对共享 jar 包提供了安全,可以减少包冲突的风险。
如果一开始没有做好版本管理,那么整理依赖包时,有两种思路:
第一,保险的抽取公共包的方法是按 jar