springcloud学习之分布式项目的相关引用
使用springcloud开发分布式系统时,多个微服务需要相互调用,一般采用feign的方式进行调用,如果各微服务分别编写,可能会存在很多的冗余代码,所以一般会把各个微服务需要使用的公共代码进行抽取,然后创建一个公共的服务,以供各个微服务进行调用,具体的方法如下:本文使用的IDEA2019 3.3版本,springboot2.2.4版本。
一、创建项目,本项目共创建了4个微服务项目和一个公共的项目,如下图:
1、springboot-employee-service01项目是提供员工相关信息查询的微服务,springboot-employee-service02项目是springboot-employee-service01的集群。
2、springboot-eureka-service01是注册中心eureka的微服务
3、springboot-feign-api-service是提供所有微服务公共代码的
4、springboot-order-service01是提供订单服务的微服务。
二、微服务引入springboot-feign-api-service项目(公共代码),下面以springboot-order-service01服务引用springboot-feign-api-service为例,介绍如何解决这个坑。
1、把springboot-feign-api-service进行clean+install,打包后上传到本地的maven仓库内。
2、springboot-order-service01项目在pom.xml中导入上述的依赖包:
<dependency> <groupId>com.cn</groupId> <artifactId>springboot-feign-api-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
3、在springboot-order-service01中调用springboot-feign-api-service中的相关服务。
三、代码完成后,微服务的安装。这里有一个坑,一定要注意。
1、打包springboot-eureka-service01项目,使用maven中的package命令。
2、打包springboot-order-service01项目,使用maven中的package命令,但是会一直报错找不到springboot-feign-api-service项目中的公共类,无法进行打包。
3、出现上述问题的原因是因为springboot-feign-api-service打包安装使用的springboot内置的构建工具(如下)和springboot-order-service01使用的构建工具相同,产生了冲突。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
4、解决方法:
因为公共代码项目是提供其他所有的微服务项目调用,所以修改公共代码项目的构建方法,具体如下
a、springboot2.x
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>repackage</id> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin>
b、springboot1.x
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin>