微服務中基於Spring Boot的maven分布式項目框架的搭建
這裏搭建的是基於 maven 的分布式工程,因為在一個項目中,多個微服務是屬於同一個工程,只不過是提供不同的服務而已,再加上 IDEA 是默認一個窗口打開一個項目工程(這點和 eclipse 不同),如果項目大,不用 maven 聚合工程的話,那估計會打開十幾個窗口……會崩潰……而且在架構上,也應該使用 maven 分布式工程來搭建微服務架構。這裏手把手教大家在 IDEA 中搭建基於 maven 分布式的 Spring Cloud 微服務工程架構。
-
maven分布式工程架構
首先來看一下 maven 分布式工程的基本架構,如下:microservice ---- microservice-common ---- microservice-order-provider ---- microservice-order-consumer
在 IDEA 中,並沒有這個結構化的展示,這幾個模塊都是平級的方式展現在我們眼前,但是彼此有依賴關系,體現在 pom.xml 文件中,在下文會詳細說明。microservice 為父工程模塊,主要用來定義整個分布式工程的依賴版本;microservice-common 為公共模塊,主要用來定義一些公共的組件,比如實體類等;microservice-order-provider 為訂單服務提供者模塊,提供訂單信息,實際項目中可能還有其他服務提供模塊;microservice-order-consumer 為服務消費模塊,當然了,消費模塊也可能有很多,這裏只創建一個,實際項目中可以在此基礎上進行擴展。
- maven父工程microservice的搭建
打開 IDEA, File -> New -> New Project,然後選擇 Empty Project,如下。
Next,然後給 maven 分布式項目起個名兒,如 maven_distributed。
接下來會彈出窗口讓我們新建 modules,點擊 + 號,新建一個父工程,也就是一個父 module。然後我們選擇 maven 工程,選擇 jdk 版本和模板,模板也可以不選擇,我這裏就沒有選擇,自己搭建即可。
Next,需要輸入 GroupId 和 ArtifactId,這和普通的 maven 工程沒什麽兩樣,如:
GroupId:com.itcodai ArtifactId:microservice
創建好之後,該父工程 microservice 是個空的 maven 工程,只有 src 目錄和 pom.xml 文件,在父工程中我們主要做什麽呢?父工程中主要用來定義一些依賴的版本,子工程在創建的時候繼承該父工程,就可以使用對用的依賴,不需要指定版本號。同時,如果有版本相關的修改,只要在父工程中修改即可,這是 maven 分布式工程的好處之一,它就相當於 Java 中的抽象父類。
新創建的空 maven 工程沒有指定其 <packaging> 類型,maven 父工程需要指定 packaging 類型為 pom,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcodai</groupId>
<artifactId>microservice</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
然後我們來定義一些依賴和相應的版本,依賴的版本我們定義在 properties 標簽內,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<!-- 省略其他內容 -->
<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>Edgware.SR1</spring-cloud.version>
<spring-boot.version>2.0.3.RELEASE</spring-boot.version>
<mysql.version>5.1.46</mysql.version>
<mybatis.version>1.3.2</mybatis.version>
<lombok.version>1.16.18</lombok.version>
</properties>
</prject>
如上,我們定義了項目的編碼為 UTF-8,編譯版本為 jdk8,其他依賴版本為:
Spring Cloud 的版本為 Edgware.SR1,Spring Cloud 的版本號定義的非常“奇怪”,不是我們平常看到的幾點幾版本,它是由地名兒來命名的;
Spring Boot 版本為當前最新版本 2.0.3.RELEASE;
mysql 版本為 5.1.14;
mybatis 版本為 1.3.2;
lombok版本為 1.16.8.
其他依賴在項目使用到時,再添加即可,這裏先定義這麽多。在定義版本時,要註意的是不同的依賴版本之間會有影響,有些最新的版本不支持其他依賴的低版本一起使用,比如 mysql 的版本太低就不行,例如 5.0.4 版本就無法和最新的 mybatis 一起使用,這些在實際項目中都踩過坑,所以大家在學習的時候要多嘗試,多總結,最新版本不是不好用,有時候是用不好。但是只要認真探索,多踩坑才能進步。
定義了依賴版本之後,接下來我們就在父工程中定義依賴管理,放在 <dependencyManagement> 標簽中,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<!-- 省略其他內容 -->
<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>
<!-- 定義 mysql 版本 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 定義 mybatis 版本 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 定義 lombok 版本 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
使用 ${} 來定義上面 <properties> 標簽中定義的版本即可。最後我們定義一下 maven 插件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<!-- 省略其他內容 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
-
maven子工程microservice-common模塊搭建
接下來我們搭建 maven 子工程中的公共模塊 microservice-common,新建子模塊,我們要選擇 module,步驟為: File -> New -> Module,然後選擇 maven,這和上面建立父工程一模一樣,下一步的時候需要註意:
這裏要註意的是,使用 IDEA 創建子模塊的時候,不需要選擇 “Add as module to” 這一項,默認是選擇了我們剛剛創建的父工程 microservice,我們在 Parent 項選擇剛剛創建的 microservice 模塊即可,然後給該子模塊起名為 microservice-common。創建好之後,我們來看一下該模塊的 pom.xml 文件:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>microservice</artifactId> <groupId>com.itcodai</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../microservice/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-common</artifactId>
</project>
可以看到,在 microservice-common 模塊中,有個 <parent> 標簽,裏面內容是父工程 microservice 的相關信息,包括依賴的路徑也標出來了,這樣 microservice-common 模塊和 microservice 模塊就建立了關聯。子模塊的 <packaging> 類型我們定義成 jar 即可。
`<packaging>jar</packaging>`
在 microservice-common 模塊我們主要定義一些公共的組件,本節課中,我們先定義一個訂單實體類,因為這個實體在其他模塊也要用到,所以我們定義在這個公共模塊中,那麽在該模塊中,目前我們只需要引入 lombok 即可。如下:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
微服務中基於Spring Boot的maven分布式項目框架的搭建