部署Springcloud微服务架构项⽬问题总结
前⾔
众所周知,Springcloud项⽬由⼀个个springboot项⽬组成,⽽springboot项⽬本⾝⾃带Tomcat,当我们想要部署springboot项⽬时,只要使⽤maven⼯具将其打成jar包,放到有java环境的系统,使⽤命令java -jar xxx.jar,即可成功运⾏起来。
本⽂以微服务架构项⽬的后端部分为例⼦,作打包部署时遇到的问题总结。尚医通也是我学习的第⼀个微服务实战项⽬,⽹上有详细免费教程,课程最后没有讲到如何部署,经过调查研究有了此篇⽂章。
项⽬结构
截图展⽰到模块,再展开就是模块内部结构。可以看到此项⽬分了最多三层,在顶层项⽬yygh_parent下有多个⼦模块,其中common、service、service_client模块内⼜有多个⼦模块。
service:业务模块,放置所有的业务逻辑
common:公共模块,包含⼀些⼯具类,被业务模块多处引⽤
model:模型模块,放置所有的实体类,作为⽗类被继承或基础类使⽤
service_client:feign模块,⽤于微服务之间的调⽤
service_gateway:全局⽹关
hospital-manage:⼀个独⽴项⽬,后⾯不再涉及
项⽬打包
在打包之前,应该确保项⽬在本地能够正常运⾏。
maven的打包⽅式
maven有三种打包⽅式,分别为jar(默认)、pom、war
jar:默认打包⽅式,打包后在项⽬的target⽂件下会产⽣⼀个新的jar包,此jar包⾃带Tomcat环境,可以直接运⾏
pom:⽤于⽗项⽬,⽤于做版本控制
war:打包成⼀个web项⽬
修改l配置⽂件
在此项⽬下,所有的⽗项⽬都应该以pom作为打包⽅式,⼦项⽬以jar为打包⽅式。⽐如service属于⽗项⽬,没有⾃⼰的启动类,所以打包⽅式为pom,service下的service_hosp是⼦项⽬,打包⽅式为jar。
其次,打成jar包需要配置打包插件,项⽬使⽤springboot提供的插件。
<build>
<finalName>service_hosp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
运⾏打包命令
配置完后,在总项⽬⽬录(yygh_parent)中输⼊打包命令mvn package进⾏打包。或者点击idea提供的打包图形化⼯具:
如果打包后没有报错,打好的jar包会放到target⽬录下:
可以先做测试,直接在终端到达此⽬录下,使⽤java -jar service_hosp.jar运⾏jar包,像在idea中启动⼀样做好相关测试。
打包时遇到的问题
maven打包本地jar包
项⽬如果⾜够复杂,有些依赖是⾃⼰开发的,⽐如这个尚医通项⽬,在业务模块service_hosp中需要引⼊common模块的⼦模块
rabbit_utils
如果不做任何处理,在本地测试时会⾃动引⼊,但打包时就会报错,原因在于不到这个包。分析原
因,maven在打包时会将依赖引⼊,它会先到本地的maven仓库中查有没有相关依赖,如果没有会到⽹络仓库(在maven⽂件中配置,默认maven⾃⼰的仓库)中查。如果我们不事先将这个依赖放到仓库,肯定会报错。
在执⾏上述步骤全局打包之前,可以先执⾏以下代码:
mvn dependency:resolve -Dclassifier=sources
此代码⽤于加载依赖资源,下载依赖资源,我们在debug、查看源码时,可能也会需要⽤到。最后报错信息中,会显⽰哪些依赖没有到,⽐如上⾯截图的依赖,这时候再将这些依赖⼀⼀放到本地maven仓库就⾏。执⾏以下代码:
mvn install:install-file -Dfile=common/common_utils/target/rabbit_utils-1.0.jar -DgroupId=com.ouou -DartifactId=rabbit_utils -Dversion=1.0 -Dpackaging=jar
groupId、artifactId、version:依赖的gav坐标
packaging:依赖类型
file:⽂件路径。注意是相对路径,上⾯的终端在yygh_parent⽬录下打开,通过相对路径定位到这个jar包
尾声
这部分是啰嗦环节。
通过上⾯步骤成功打成的jar包,在本地测试没问题后,可以直接放到服务器上运⾏了,当然前提是还有数据库、nacos等配置需要改成真实的ip。我在本地测试也没问题,遗憾的是我没有放到服务器上。
⾸先是因为这个项⽬实在太⼤了,如果将前端部分、nacos、redis、MongoDB全部跑起来,有⼗多个服务,即使是在本地也⽆法全部启动。所以我做到后⾯经常程序崩溃(⼈也有点崩),内存溢出,只能是做了哪些功能就跑哪些服务。我的个⼈电脑有16g内存,然⽽测试服务器只有1g内存,⽬前还跑了其他项⽬。
其次,部署相关知识薄弱,还在⼩打⼩闹的阶段。⽤上述的打包⽅式会将依赖也⼀起打包,使得jar包臃肿,还有其他的打包⽅式和⼯具。应该可以做优化,还需深⼊学习。
最后,由于经历过各种软件安装的锻炼(zhe mo),打算了解下docker。
参考链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。