SpringCloud微服務架構搭建--父子項目構建(一)


學而時習之,不亦說乎

前言

本篇基於maven來構建微服務項目的基本項目架構,我們知道所謂微服務,即會將多個業務划分成多個項目來處理,如何統一的管理這些項目,maven引出了父子項目的結構,可以方便的給我們提供:

  1. 統一依賴管理
  2. 控制插件版本
  3. 聚合項目

創建父項目

使用STS創建,file->new->other…,選擇Maven下的Maven Project,按如下圖創建父項目,注意packaging選擇pom

創建成功后,保留pom.xml即可。在pom中增加SpringCloud、及SpringCloud-alibaba主版本的配置:

<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.mingx</groupId>
  <artifactId>mingx-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.5.RELEASE</version>
  </parent>

   <properties>
           <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>0.9.0.RELEASE</spring-cloud-alibaba.version>
        <lombok.version>1.16.20</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-cloud-alibaba主版本管理  -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- lombok主版本管理  -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
       </dependencies>
   </dependencyManagement>

   <dependencies>
   </dependencies>

</project>

在pom.xml的dependencyManagement標簽中已經將后續依賴的Spring Clould版本以及Spring Cloud Alibaba版本。

因為Spring Cloud Alibaba是基於Spring Cloud Common的規范實現的,所以在構建項目時,一定要注意Spingboot、Spring Cloud和Spring Cloud Alibaba三者之間的關系,具體的版本關系如下

SpringClould Version SpringCloud Alibaba Version SpringBoot Version
Greenwich 0.9.X.RELEASE 2.1.X.RELEASE
Finchley 0.2.X.RELEASE 2.0.X.RELEASE
Edgware 0.1.X.RELEASE 1.5.X.RELEASE
Dalston 0.1.X.RELEASE 1.5.X.RELEASE

另外在父項目的pom.xml中,需要理解dependencyManagement與dependencies區別:

  1. dependencyManagement里只是聲明依賴,並不實現引入,因此子項目需要顯式的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,並且沒有指定具體版本,才會從父項目中繼承該項,並且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本
  2. dependencies即使在子模塊中不寫該依賴項,那么子模塊仍然會從父項目中繼承該依賴項(全部繼承)

創建子項目

創建具體業務子項目,比如現在我們創建一個最常見的用戶微服務項目,為了更清晰的划分具體微服務功能結構,
將業務子項目划分三個更細化的子項目,它們是:

  1. 提供主體業務實現的微服務mingx-user
  2. 提供pojo類的微服務mingx-user-pojo
  3. 提供微服務之間調用的微服務mingx-user-client

具體操作步驟:

  1. STS創建mingx-user,file->new->other…,選擇Maven下的Maven Module,如下圖:
  1. 創建完成之后,修改pom.xml文件,如下:
<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>
  <parent>
    <groupId>com.mingx</groupId>
    <artifactId>mingx-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>mingx-user</artifactId>

  <dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>

  </dependencies>

</project>
tip:此處引入的spring-cloud-starter-config理論上應該不用,但是以目前簡單形式啟動子項目會出現無法讀取到配置文件的問題,報No active profile set, falling back to default profiles: default,導致即使在配置文件中設置了端口號,啟動仍然是8080,后續結合nacos后,不需要次依賴了。
  1. src/main/java目錄下創建com.mingx包,創建UserApplication.java主函數文件,其中代碼如下:
package com.mingx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class UserApplication {

     public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}
  1. src/main/java目錄下創建com.mingx.user.controller包,存放控制類相關文件,創建UserController.java類,用於測試,里面代碼如下:
package com.mingx.user.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/helloUser")
    public String helloUser() {
        return "Hello user" ;
    }
}
  1. main/src/resourse目錄下,創建項目配置文件bootstrap.yml,內容如下:
spring:
    application:
        name: mingx-user # 項目名稱
server:
    port: 7001 # 啟動端口
  1. 現在可以啟動mingx-user項目了,找到UserApplication.java,空白處右擊run as -->Springboot app
  2. 正常啟動成功后,在瀏覽器中訪問:http://127.0.0.1:7001/user/helloUser,如果可以正常響應如下內容,說明已經成功了。

tip:

在創建了多個子項目后,如果不做什么設置在STS中顯示是這樣子的:

對於有強迫症的小伙伴來說,既然圖中mingx-user是mingx-demo的子項目,為什么它不在其下面,而是與父項目平行的,為了解決這個尷尬,可以在STS中做如下設置:

  1. window--》Show View --》Project Explorer,顯示其窗口
  2. 在Project Explorer窗口中,點擊倒三角按鈕,Projects Presentation--》選擇Hierarchical,此時就會以父項目包含子項目的形式顯示:

結束語

關於父子項目的構建,基本上已經完成了,如果你對SpringBoot很熟,也使用過Maven的話,本章基本上沒有難度,尚未涉及到SpringClould微服務相關內容,按照以上步驟,分分鍾搞定。

另外其他兩個POJO微服務,以及內部調用微服務,在后續業務深入后再創建,過程與創建mingx-user微服務是一致的,略有差別。

下一篇介紹Nacos,一個牛叉的注冊中心和配置中心。

點關注,不迷路

微信搜索【尋的足跡】關注公眾號,第一時間收到最新文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM