SpringBoot中如何部署Jar文件-创新互联
这篇文章主要介绍“SpringBoot中如何部署Jar文件”,在日常操作中,相信很多人在SpringBoot中如何部署Jar文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot中如何部署Jar文件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都网站制作、昌江黎族网络推广、成都微信小程序、昌江黎族网络营销、昌江黎族企业策划、昌江黎族品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联为所有大学生创业者提供昌江黎族建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com主要配置:
${project.artifactId} org.springframework.boot spring-boot-maven-plugin
配置输出:
cd package-optimize-level0 mvn clean install ls -lh package-optimize-app1/target/package-optimize-app1.jar -rw-r--r-- 1 lixia wheel 16M Feb 24 21:06 package-optimize-app1/target/package-optimize-app1.jar java -jar package-optimize-app1/target/package-optimize-app1.jar
重点说明:
(当前演示应用仅依赖了spring-boot-starter-web极少组件,所有构建输出只有十来MB)实际情况单一构建根据项目依赖组件量输出jar一般在几十MB到一两百MB甚至更大。
假如有十来个微服务需要部署,那就意味着需要传输一两个GB的文件,耗时可想而知。就算是单一更新个别微服务也需要传输一两百MB。
Level 1:常见的依赖jar分离构建方式
参考项目目录:package-optimize-level1
关解决问题:
降低单个微服务jar的文件大小,以便部署过程秒传文件。 主要配置:
重点配置说明请详见如下注释说明:
${project.artifactId} org.apache.maven.plugins maven-dependency-plugin copy-dependencies package copy-dependencies ${project.build.directory}/lib false false true org.springframework.boot spring-boot-maven-plugin null null ZIP repackage
配置输出:
cd package-optimize-level1 mvn clean install ls -lh package-optimize-app1/target/package-optimize-app1.jar -rw-r--r-- 1 lixia wheel 149K Feb 24 20:56 package-optimize-app1/target/package-optimize-app1.jar java -jar -Djava.ext.dirs=lib package-optimize-app1/target/package-optimize-app1.jar
实现效果:
单一构建根据项目依赖组件量输出jar一般仅有一两百KB,基本可以做到秒传。
这个是网上可见最常见的优化方案,还值得继续深入:假如有十来个微服务,每个服务一个jar和一个lib目录文件,首次部署也差不多需要传输一两个GB文件。
Level 2:合并所有模块依赖jar到同一个lib目录
参考项目目录:package-optimize-level2
解决问题:
合并所有模块依赖jar到同一个lib目录,一般由于各模块项目依赖jar重叠程度很高,合并所有服务部署文件总计大小基本也就两三百MB
但是如果采用-Djava.ext.dirs=lib加载所有jar到每个JVM,一来每个JVM都完整加载了所有jar耗费资源,二来各微服务组件版本不同会出现版本冲突问题
主要配置:
重点配置说明请详见如下注释说明:
${project.artifactId} org.apache.maven.plugins maven-jar-plugin true lib/ false org.apache.maven.plugins maven-dependency-plugin copy-dependencies package copy-dependencies ${boot-jar-output}/lib false false false org.springframework.boot spring-boot-maven-plugin null null ZIP ${boot-jar-output} repackage
所有lib目录文件及各微服务构建jar聚合到devops公共目录。
微服务jar文件中的META-INFO/MANIFEST文件中会生成根据模块依赖组件列表的Class-Path属性, 从而避免了不同版本jar:
Class-Path: lib/spring-boot-starter-web-2.4.3.jar lib/spring-boot-starte r-2.4.3.jar lib/spring-boot-2.4.3.jar lib/spring-boot-autoconfigure-2.4 .3.jar lib/spring-boot-starter-logging-2.4.3.jar lib/logback-classic-1. 2.3.jar lib/logback-core-1.2.3.jar lib/slf4j-api-1.7.30.jar lib/log4j-t o-slf4j-2.13.3.jar lib/log4j-api-2.13.3.jar lib/jul-to-slf4j-1.7.30.jar lib/jakarta.annotation-api-1.3.5.jar lib/spring-core-5.3.4.jar lib/spr ing-jcl-5.3.4.jar lib/snakeyaml-1.27.jar lib/spring-boot-starter-json-2 .4.3.jar lib/jackson-databind-2.11.4.jar lib/jackson-annotations-2.11.4 .jar lib/jackson-core-2.11.4.jar lib/jackson-datatype-jdk8-2.11.4.jar l ib/jackson-datatype-jsr310-2.11.4.jar lib/jackson-module-parameter-name s-2.11.4.jar lib/spring-boot-starter-tomcat-2.4.3.jar lib/tomcat-embed- core-9.0.43.jar lib/jakarta.el-3.0.3.jar lib/tomcat-embed-websocket-9.0 .43.jar lib/spring-web-5.3.4.jar lib/spring-beans-5.3.4.jar lib/spring- webmvc-5.3.4.jar lib/spring-aop-5.3.4.jar lib/spring-context-5.3.4.jar lib/spring-expression-5.3.4.jar
配置输出:
cd package-optimize-level2 mvn clean install ls -lh devops/ total 912 drwxr-xr-x 34 lixia wheel 1.1K Feb 24 22:27 lib -rw-r--r-- 1 lixia wheel 150K Feb 24 22:31 package-optimize-app1.jar -rw-r--r-- 1 lixia wheel 149K Feb 24 22:31 package-optimize-app2.jar -rw-r--r-- 1 lixia wheel 149K Feb 24 22:31 package-optimize-app3.jar java -jar devops/package-optimize-app1.jar
实现效果:
启动过程不再需要 -Djava.ext.dirs=lib 参数定义。
所有微服务jar引用所有项目合并依赖组件的公共目录,部署文件总计大小一般在两三百MB。
通过定制每个微服务jar文件中的META-INFO/MANIFEST文件中的Class-Path明确指明依赖版本组件类,解决各微服务不同组件版本冲突问题。
Level 3:支持system引入的非官方的三方依赖组件
参考项目目录:package-optimize-level3
解决问题:
有些非官方三方的诸如sdk jar,一种做法是提交到Maven本地游戏中去引用,那和普通依赖jar处理相同;但是在没有maven游戏的情况下,常见的简化做法都是直接在项目中放置依赖jar然后在pom中以system scope方式定义。
对于在pom中是以systemPath方式引入的,maven-jar-plugin组件没有直接参数声明包含指定scope的组件, 如果不做特殊处理META-INFO/MANIFEST中不会出现这些scope定义的组件,导致运行时类找不到。
主要配置:
重点配置说明请详见如下注释说明:
${project.artifactId} org.apache.maven.plugins maven-jar-plugin true lib/ false ${jar-manifestEntries-classpath} org.apache.maven.plugins maven-dependency-plugin copy-dependencies package copy-dependencies ${boot-jar-output}/lib false false false org.springframework.boot spring-boot-maven-plugin null null ZIP ${boot-jar-output} repackage
子模块主要配置:
../devops . lib/hik-sdk-1.0.0.jar com.hik hik-sdk 1.0.0 system ${project.basedir}/lib/hik-sdk-1.0.0.jar org.springframework.boot spring-boot-starter-web
微服务输出jar文件中的META-INFO/MANIFEST文件中会生成根据模块依赖组件列表的Class-Path属性, 最前面会追加 jar-manifestEntries-classpath 属性定义值:
Class-Path: . lib/hik-sdk-1.0.0.jar lib/spring-boot-starter-web-2.4.3.ja r lib/spring-boot-starter-2.4.3.jar lib/spring-boot-2.4.3.jar lib/sprin g-boot-autoconfigure-2.4.3.jar lib/spring-boot-starter-logging-2.4.3.ja r lib/logback-classic-1.2.3.jar lib/logback-core-1.2.3.jar lib/slf4j-ap i-1.7.30.jar lib/log4j-to-slf4j-2.13.3.jar lib/log4j-api-2.13.3.jar lib /jul-to-slf4j-1.7.30.jar lib/jakarta.annotation-api-1.3.5.jar lib/sprin g-core-5.3.4.jar lib/spring-jcl-5.3.4.jar lib/snakeyaml-1.27.jar lib/sp ring-boot-starter-json-2.4.3.jar lib/jackson-databind-2.11.4.jar lib/ja ckson-annotations-2.11.4.jar lib/jackson-core-2.11.4.jar lib/jackson-da tatype-jdk8-2.11.4.jar lib/jackson-datatype-jsr310-2.11.4.jar lib/jacks on-module-parameter-names-2.11.4.jar lib/spring-boot-starter-tomcat-2.4 .3.jar lib/tomcat-embed-core-9.0.43.jar lib/jakarta.el-3.0.3.jar lib/to mcat-embed-websocket-9.0.43.jar lib/spring-web-5.3.4.jar lib/spring-bea ns-5.3.4.jar lib/spring-webmvc-5.3.4.jar lib/spring-aop-5.3.4.jar lib/s pring-context-5.3.4.jar lib/spring-expression-5.3.4.jar
配置输出:
cd package-optimize-level3 mvn clean install ls -lh devops/ total 912 drwxr-xr-x 36 lixia wheel 1.1K Feb 24 23:14 lib -rw-r--r--@ 1 lixia wheel 150K Feb 24 23:14 package-optimize-app1.jar -rw-r--r-- 1 lixia wheel 150K Feb 24 23:14 package-optimize-app2.jar -rw-r--r-- 1 lixia wheel 150K Feb 24 23:14 package-optimize-app3.jar java -jar devops/package-optimize-app1.jar
最终实现效果
所有服务的依赖组件合并到一个目录,总计大小在两三百MB,首次部署传输效率明显提速。
各微服务jar一两百KB大小,日常紧急修复Bug更新个别jar基本就是瞬间秒传。
各微服务jar中各自定义依赖指定版本组件列表,不会出现组件不同版本加载冲突问题。
非官方的三方依赖组件也能正常引用处理。
到此,关于“SpringBoot中如何部署Jar文件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
文章名称:SpringBoot中如何部署Jar文件-创新互联
文章网址:http://ybzwz.com/article/dejpoe.html