1. 程式人生 > 其它 >springcloud-rest學習環境搭建

springcloud-rest學習環境搭建

1 準備階段

1.1 介紹

  • 我們會使用一個Dept部門模組做一個微服務通用案例Consumer消費者(Client)通過REST呼叫Provider提供者(Server)提供的服務。
  • 回顧Spring,SpringMVC,Mybatis等以往學習的知識。
  • Maven的分包分模組架構複習。

1.2 SpringCloud版本選擇

大版本說明

SpringBoot SpringCloud 關係
1.2.x Angel版本(天使) 相容SpringBoot1.2x
1.3.x Brixton版本(布里克斯頓) 相容SpringBoot1.3x,也相容SpringBoot1.4x
1.4.x
Camden版本(卡姆登) 相容SpringBoot1.4x,也相容SpringBoot1.5x
1.5.x Dalston版本(多爾斯頓) 相容SpringBoot1.5x,不相容SpringBoot2.0x
1.5.x Edgware版本(埃奇韋爾) 相容SpringBoot1.5x,不相容SpringBoot2.0x
2.0.x Finchley版本(芬奇利) 相容SpringBoot2.0x,不相容SpringBoot1.5x
2.1.x Greenwich版本(格林威治)  

實際開發版本關係

spring-boot-starter-parent   spring-cloud-dependencles
 
版本號 釋出日期 版本號 釋出日期
1.5.2.RELEASE 2017-03 Dalston.RC1 2017-x
1.5.9.RELEASE 2017-11 Edgware.RELEASE 2017-11
1.5.16.RELEASE 2018-04 Edgware.SR5 2018-10
1.5.20.RELEASE 2018-09 Edgware.SR5 2018-10
2.0.2.RELEASE 2018-05 Fomchiey.BULD-SNAPSHOT 2018-x
2.0.6.RELEASE 2018-10 Fomchiey-SR2 2018-10
2.1.4.RELEASE 2019-04
Greenwich.SR1 2019-03

本次專案使用表中最新的版本

1.3 建立資料庫

新建一個數據庫 db01 並新增dept表

1.4 專案結構

一個父工程下攜帶三個子模組

  • springcloud-父工程
  • springcloud-api 【封裝的整體pojo/介面/公共配置等】-子模組
  • springcloud-provider-dept-8001 【服務提供者】-子模組
  • springcloud-consumer-dept-80 【服務消費者】-子模組

2 建立父工程

2.1 搭建目錄結構

新建一個普通的maven專案-springcloud,刪除src目錄並新建三個子模組

2.2 匯入父工程需要的依賴

springcloud : 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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lv</groupId>
    <artifactId>springcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springcloud-api</module>
        <module>springcloud-provider-dept-8001</module>
        <module>springcloud-consumer-dept-80</module>
    </modules>

    <!--打包方式 pom-->
    <packaging>pom</packaging>

    <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>
        <junit.version>4.12</junit.version>
        <lombok.version>1.16.18</lombok.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--SpringCloud的依賴-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot的依賴-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--資料庫-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!--SpringBoot mybatis啟動器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!--日誌測試-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!--Log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

3 編寫公共模組

編寫springcloud-api模組

3.1 匯入springcloud-api需要的依賴

springcloud-api : 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>springcloud</artifactId>
        <groupId>com.lv</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-api</artifactId>

    <!--當前Module自己需要的依賴,如果父依賴中已經配置了版本,這裡就不用寫了-->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

3.2 編寫實體類

建立包結構 com.lv.springcloud.pojo ,並在該包下編寫實體類Dept

springcloud-api : src/main/java/com/lv/springcloud/pojo/Dept.java

package com.lv.springcloud.pojo;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@NoArgsConstructor
@Accessors(chain = true) //支援鏈式寫法
public class Dept implements Serializable { //Dept 實體類,orm 類表關係對映
    private Long deptno;//主鍵
    private String dname;

    //這個資料存在哪個資料庫的欄位~微服務,一個服務對應一個數據庫,同一個資訊可能存在不同的資料庫
    private String db_source;
    public Dept(String dname) {
        this.dname = dname;
    }
    /*
    鏈式寫法:
        Dept dept = new Dept();
        dept.setDeptno(11).setDname('ssss').setDb_source('011');
     */
}