部署Springcloud微服务架构项目问题总结

前言

众所周知,Springcloud项目由一个个springboot项目组成,而springboot项目本身自带Tomcat,当我们想要部署springboot项目时,只要使用maven工具将其打成jar包,放到有java环境的系统,使用命令java -jar xxx.jar,即可成功运行起来。

本文以微服务架构项目尚医通的后端部分为例子,作打包部署时遇到的问题总结。尚医通也是我学习的第一个微服务实战项目,网上有详细免费教程,课程最后没有讲到如何部署,经过调查研究有了此篇文章。

项目结构

image-20220308112429923

截图展示到模块,再展开就是模块内部结构。可以看到此项目分了最多三层,在顶层项目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项目

修改pom.xml配置文件

在此项目下,所有的父项目都应该以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提供的打包图形化工具:

image-20220308122119465

如果打包后没有报错,打好的jar包会放到target目录下:

image-20220308122243014

可以先做测试,直接在终端到达此目录下,使用java -jar service_hosp.jar运行jar包,像在idea中启动一样做好相关测试。

打包时遇到的问题

项目如果足够复杂,有些依赖是自己开发的,比如这个尚医通项目,在业务模块service_hosp中需要引入common模块的子模块rabbit_utils

image-20220308123415412

如果不做任何处理,在本地测试时会自动引入,但打包时就会报错,原因在于找不到这个包。分析原因,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。

参考链接

尚医通

Spring Boot Maven Plugin

Maven打包的三种方式

打包部署微服务项目

springboot微服务项目打包

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值