spring cloud版本选择与项目创建

  1. SpringCloud、SpringBoot、SpringCloud Alibaba版本选择

     官网地址https://spring.io/projects/spring-cloud,因为我们要学习的是SpringCloud项目,可以通过下图的菜单点击进入到这个地址。

spring cloud版本选择与项目创建_第1张图片

进入后的页面就是SpringCloud的项目概述页,找到下面这段话

spring cloud版本选择与项目创建_第2张图片

简单翻译一下,标题Release Trains:发布系列。Spring Cloud是一个伞形项目,由独立项目组成,原则上具有不同的发布节奏。为了管理维护各个子项目的版本号,spring cloud发布时会附带一组对单个项目的依赖关系(见下文)。Spring cloud发布的version用的是英文名称,而不是版本号,以避免与子项目混淆。Version的这个英文名字是一个字母顺序(所以你可以按时间顺序排序)与伦敦地铁站的名字(“Angel”是第一个版本,“Brixton”是第二个)。当单个项目的点发布累积到一个临界质量时,或者如果其中一个项目中有一个需要向所有人提供的关键bug,则将推出名称以“.SRX”结尾的版本,其中“X”是一个数字。

通过这段话,我们就知道了spring cloud各个版本号的起名来历,是按照字母顺序,并且取自伦敦地铁站的名称,例如Dalston、Edgware、Finchley(spring官方用完26个字母,估计就得还一种命名规则了),而且当还用.SR+版本号结尾,比如最新的spring cloud版本依赖


    org.springframework.cloud
    spring-cloud-dependencies
    Hoxton.SR4

也可以从maven中央仓库上看出这个规律https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies

spring cloud版本选择与项目创建_第3张图片

那么如何选择对应的spring boot的版本呢?第一张图上已经给出了对应关系表,其中Boot Version中的2.2.x就是我们maven中央仓库里面的下图所示,这些是都可以的。(https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies)

spring cloud版本选择与项目创建_第4张图片

Spring cloud alibaba的版本如何选择呢?还是看官网

spring cloud版本选择与项目创建_第5张图片

拖到下面

spring cloud版本选择与项目创建_第6张图片

这里也给出了对应的关系图,图上的“x”也就是对应的版本号了。现在maven仓库上的最新版本如下(https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies)

spring cloud版本选择与项目创建_第7张图片

虽然官网上没有明说,spring cloud alibaba的2.2.x版本对应的springcloud、springboot版本号是多少,但是阿里巴巴的小伙子们还是不错的,还是在github(https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md)上指明了他们的对应关系

spring cloud版本选择与项目创建_第8张图片

所以,spring cloud alibaba的2.2.x版本对应springcloud的Hoxton版,对应springboot的2.2.x版。

       由上面的讨论,我选择了springcloud的Hoxton版、springboot的2.2.x版和spring cloud alibaba的2.2.x版。下面我们就能创建一个工程了。

2.maven创建父子工程

       因为项目比较多,所以使用父子工程来统一管理spring cloud、spring boot、spring cloud alibaba等这些依赖的版本号。Maven使用dependencyManagement元素能让所有在子项目中引用一个依赖而不用显示的列出版本。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个dependencyManagement元素指定的版本号。

        这样做的好处就是: 如果有多个子项目都引用同一样的依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样想升级或切换到另一个版本时,只需在顶层父容器里更新,而不需要一个一个子项目的修改;另外如果某个子项目需要另外的一个版本,只需声单独在子项目的pom文件中声明version版本 。

       注意:dependencyManagement只是声明依赖,并不实现引入,因此子项目需要在pom文件中显示的声明需要使用的依赖。

3. 创建父工程和子工程cloud-provider-payment8001

父工程名称cloud2020,子工程cloud-provider-payment8001。

父工程的pom文件


        
            
            
                org.springframework.boot
                spring-boot-dependencies
                2.2.2.RELEASE
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Hoxton.SR1
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.1.RELEASE
                pom
                import
            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            

        
    

子工程pom文件


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        // ...忽略其他等

使用spring boot在子模块开发两个接口,简单的单表的增删改查接口。 

package com.wuqinghai.springcloud.controller;

import com.wuqinghai.springcloud.entities.CommonResult;
import com.wuqinghai.springcloud.entities.Payment;
import com.wuqinghai.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @ClassName PaymentController
 * @Description 支付相关接口类
 * @Author wuqinghai01
 * @Date 2020/5/27 12:49
 * Version 1.0
 */
@RestController
@Slf4j
public class PaymentController
{
    @Resource
    private PaymentService paymentService;

    @PostMapping(value = "/payment/create")
    public CommonResult create(@RequestBody Payment payment)
    {
        int result = paymentService.create(payment);
        log.info("*****插入结果:"+result);

        if(result > 0)
        {
            return new CommonResult(200,"插入数据库成功");
        }else{
            return new CommonResult(444,"插入数据库失败",null);
        }
    }

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id)
    {
        Payment payment = paymentService.getPaymentById(id);

        if(payment != null)
        {
            return new CommonResult(200,"查询成功", payment);
        }else{
            return new CommonResult(444,"没有对应记录,查询ID: "+id,null);
        }
    }

}

具体的代码可以参考github:https://github.com/wuqinghai/cloud2020。项目逻辑:cloud-provider-payment8001服务作为生产者,提供了上面的两个http接口,cloud-consumer-order80服务作为消费者,使用RestTemplate相关api发送http请求去调用cloud-provider-payment8001服务提供的两个接口。为了优化代码将,接口入参和出参类封装到cloud-api-commons模块。

对应的sql

CREATE TABLE `payment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `serial` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

项目初始化完毕,有一个insert类型的接口和一个查询接口,为下面的学习准备好了材料。掌握了spring cloud、spring boot、spring cloud alibaba的命名规则和对应的依赖关系,dependencyManager元素的作用。

你可能感兴趣的:(spring,cloud)