在使用spring cloud 項目創建微服務項目時,遇到過很多坑,現在我將整理如下:
條件:Idea 開發工具 maven 項目
1. 創建一個空的mvn項目。
2. 創建完了就添加Module,首先添加一個Module作為項目的父類。
pom文件如下:
<modelVersion>4.0.0</modelVersion>
<groupId>cn.fintecher.pangolin</groupId>
<artifactId>microservice</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>microservice-common</module>
<module>microservice-provider</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
<spring-boot.version>2.0.5.RELEASE</spring-boot.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 定義 spring cloud 版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 定義 spring boot 版本 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 定義 lombok 版本 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3. 創建子模塊
注意紅色標注的地方為None.后面是可以選的。
4. 注意路徑,要在父類的下面。
5. 創建完之后發現父類的<modeules>中沒有包含進去
手工包含進去
6. 創建好的pom文件如下:
7. 添加啟動類
添加完引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
啟動類引用
這樣在啟動服務的時候會報
這個是由於沒有添加start統一配置,
特別說明,springboot的特性里面就有一個點,Start 全局配置,意思就是你在用其他的包的時候不知道用哪個版本,springbootstart.jar 會幫助你找到最合適的。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
加入這個pom配置,就可以啟動起來了。
8. 使用
@SpringCloudApplication 注解,這個注解封裝了@SpringBootApplication
多了一個服務發現和熔斷處理
但是引用之后啟動會報如下錯誤。
這個的原因是 spring cloud版本和springboot版本不一致引起的。
修改版本
但是版本對應關系如下:
通過這個圖並不能准確的確定版本的對應關系,所以還是要看網上的同學的踩坑分享。
還需要增加一個pom配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
這樣就可以順利啟動起來了。
源碼地址:https://github.com/jamesbaoyi/springcloud-sample
源碼地址2: https://github.com/jamesbaoyi/luyue-service