SpringCloud-3-基础工程构建

4 springcloud基础工程构建

4.1 Spring Cloud版本选择

  • 在使用 Spring Boot + Spring Cloud 进行微服务开发时,我们需要根据项目中 Spring Boot 的版本来决定 Spring Cloud 版本,否则会出现许多意想不到的错误。

  • Spring Boot 与 Spring Cloud 的版本对应关系如下表(参考自 Spring Cloud 官网)。

Spring Cloud Spring Boot 关系
2021.0.x aka Jubilee 2.6.x, 2.7.x (从 Spring Cloud 2021.0.3开始)
2020.0.x (Ilford) 2.4.x, 2.5.x (从 Spring Cloud 2020.0.3 开始)
Hoxton(霍克斯顿) 2.2.x, 2.3.x (从 Spring Cloud SR5 开始)
Greenwich(格林威治) 2.1.x
Finchley(芬奇利) 2.0.x 兼容Spring Boot2.0.x,不兼容Spring Boot1.5.×
Edgware(埃奇韦尔) 1.5.x 兼容Spring Boot1.5.×,不兼容Spring Boot2.0.×
Dalston(多尔斯顿) 1.5.x 兼容Spring Boot1.5.x,不兼容Spring Boot2.0.×
Camden(卡姆登) 1.4.x 兼容Spring Boot1.4.x,也兼容Spring Boot1.5.×
Brixton(布里克斯顿) 1.3.x 兼容Spring Boot1.3.×,也兼容Spring Boot1.4.×
Angel(天使) 1.2.x 兼容Spring Boot1.2.x

注意:Spring Cloud 官方已经停止对 Dalston、Edgware、Finchley 和 Greenwich 的版本更新。

  • 除了上表中展示的版本对应关系之外,我们还可以使用浏览器访问 https://start.spring.io/actuator/info,获取 Spring Cloud 与 Spring Boot 的版本对应关系(JSON 版)。
{		
	...
    "bom-ranges": {
            ...
            "spring-cloud": {
                "Hoxton.SR12": "Spring Boot >=2.2.0.RELEASE and <2.4.0.M1",
                "2020.0.6": "Spring Boot >=2.4.0.M1 and <2.6.0-M1",
                "2021.0.0-M1": "Spring Boot >=2.6.0-M1 and <2.6.0-M3",
                "2021.0.0-M3": "Spring Boot >=2.6.0-M3 and <2.6.0-RC1",
                "2021.0.0-RC1": "Spring Boot >=2.6.0-RC1 and <2.6.1",
                "2021.0.3": "Spring Boot >=2.6.1 and <3.0.0-M1",
                "2022.0.0-M1": "Spring Boot >=3.0.0-M1 and <3.0.0-M2",
                "2022.0.0-M2": "Spring Boot >=3.0.0-M2 and <3.0.0-M3",
                "2022.0.0-M3": "Spring Boot >=3.0.0-M3 and <3.0.0-M4",
                "2022.0.0-M4": "Spring Boot >=3.0.0-M4 and <3.1.0-M1"
            },
            ....
     }
     ...
     }
  • spring-cloud实际开发版本与spring-boot版本关系
spring-boot-starter-parent spring-cloud-dependencies
版本号/发布日期 版本号/发布日期
2.0.6.RELEASE/0ct,2018 Finchley.SR2/0ct,2018
2.1.4.RELEASE/Apr,2019 Greenwich.SR1/Mar.2019
Spring Boot >=2.6.1 and < 3.0.0-M1 2021.0.3

当前的spring-cloud-dependencies依赖版本采用年号版

4.2 DEMO整体介绍及创建

  • 由 Spring Boot 创建的微服务,为了方便管理,这里我们采用 Maven 的多 Module 结构(即一个 Project 包含多个 Module)来构建工程。使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。
  • 回忆Spring,SpringMVC,MyBatis等以往学习的知识
  • Maven的分包分模块架构复习
一个简单的Maven模块结构是这样的:
-app-parent:一个父项目(app-parent)聚合很多子项目(app-util,app-dao,app-web...)
	--pom.xm1

--app-core
	--pom.xml

--app-web
	--pom.xm1
 --
  • 一个父工程带着多个子Module子模块
  • spring-cloud-microservice父工程(Project)下初次带着3个子模块(Module)
    • microservicecloud-api【封装的整体entity/接口/公共配置等】
    • microservicecloud-provider-dept-8001【服务提供者】
    • microservicecloud-consumer-dept-80【服务消费者】

4.3 创建基础父工程(Maven Project)

  • 创建一个普通的maven项目名为 spring-cloud-microservice的 Maven 主工程 ,然后在该主工程的 pom.xml 中使用 dependencyManagement 来管理 Spring Cloud 的版本,切记Packageing是pom模式.内容如下。
  • 主要是定义POM文件,将后续各个子模块公用的jar包等统一提取出来,类似一个抽象父类。
  • 后续服务提供者、消费者,分布式组件基于此基础工程使用


    4.0.0

    org.example
    spring-cloud-microservice
    1.0-SNAPSHOT
    
        microservice-cloud-api
        microservice-cloud-provider-dept-8001
    

    
    pom

    
        8
        8
        1.8
        @
        ${java.version}
        ${java.version}
        UTF-8
        UTF-8
        4.13.2
        2.0.0-alpha7
        2.17.2
        1.18.24
        1.2.11
    
    
        
            
                
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.3
                pom
                import
            
            
            
                org.springframework.boot
                spring-boot-dependencies
                2.7.2
                pom
                import
            
            
            
                mysql
                mysql-connector-java
                8.0.29
            
            
            
                com.alibaba
                druid
                1.2.11
            
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                2.2.2
            
            
                org.projectlombok
                lombok
                ${lombok.version}
            
            
            
                junit
                junit
                ${junit.version}
            
            
            
                ch.qos.logback
                logback-core
                ${logback-core.version}
            
            
                org.apache.logging.log4j
                log4j-core
                ${log4j.version}
            
        
    
    
        spring-cloud-microservice
        
        
            
                src/main/resources
                
                    **/*.yml
                    **/*.properties
                    **/*.xml
                
                true
            
            
                src/main/java
                
                    **/*.yml
                    **/*.properties
                    **/*.xml
                
                true
            
        
        
            
                org.apache.maven.plugins
                maven-resources-plugin
                
                
                    
                        $
                    
                
            
        
    

4.4 创建公共子模块(Maven Module)

  • 在父工程下,创建一个名为 microservice-cloud-api 的 Maven Module:microservice-cloud-api,其 pom.xml 配置如下。


    
        spring-cloud-microservice
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    microservice-cloud-api

    
        8
        8
    

    
        
            org.projectlombok
            lombok
        
    

注:microservice-cloud-api 是整个工程的公共子模块,它包含了一些其他子模块共有的内容,例如实体类、公共工具类、公共依赖项等。当其他子模块需要使用公共子模块中的内容时,只需要在其 pom.xml 引入公共子模块的依赖即可。

  • idea链接mysql数据库,注意设置时区serverTimezone=UTC

SpringCloud-3-基础工程构建_第1张图片

  • 创建一个数据库springcloud_db_core,并在数据库中创建一张部门表dept
CREATE DATABASE springcloud_db_core DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `dept_no` int NOT NULL AUTO_INCREMENT,
  `dept_name` varchar(255) DEFAULT NULL,
  `db_source` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`dept_no`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;


-- DATABASE()当前数据库名字
INSERT INTO `dept` VALUES ('1', '开发部', DATABASE());
INSERT INTO `dept` VALUES ('2', '人事部', DATABASE());
INSERT INTO `dept` VALUES ('3', '财务部', DATABASE());
INSERT INTO `dept` VALUES ('4', '市场部', DATABASE());
INSERT INTO `dept` VALUES ('5', '运维部', DATABASE());
  • 在microservice-cloud-api的 com.zk.springcloud.entity 包下,创建一个名为 Dept 的实体类,代码如下。

序列化就是为了防止用户访问量过多 服务器内存多度消耗

package com.zk.springcloud.entity;

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

import java.io.Serializable;

@Data
@NoArgsConstructor
@Accessors(chain = true) //链式编程 true 如果为 true,setter 将返回this对象而不是void
public class Dept implements Serializable {
    private Integer deptNo;
    private String deptName;
    //这个数据数是存在哪个数据库的宇段
    //微服务,一个服务对应一个数据库,同一个信息可能存在不同的数据库
    private String dbSource;

    public Dept(String deptName) {
        this.deptName = deptName;
    }
}

链式编程只是简化了写法,没有什么影响,有些时候代码中需要new对象插入,正常情况下需要命名,链式可以直接new 对象.set直接插入,避免了想命名的麻烦

下一篇:SpringCloud-4-基础工程-创建服务提供者

你可能感兴趣的:(分布式,SpringCloud,spring,cloud,spring,java)