• SpringCloud学习笔记 - 基础项目搭建


    1. 创建多服务的cloud应用的一般过程

    其实和创建springboot项目是一样的:

    1. 首先创建一个父maven工程用来做依赖的版本控制
    2. 在父项目下创建子module,同样也是maven项目
    3. 修改pom,添加项目需要的依赖
    4. 配置application.yaml文件,主要是配置端口号、服务名称、组件属性等
    5. 创建springboot项目的主程序入口类,配置注解等
    6. 编写写业务代码,并测试项目

    2. 单个服务开发

    为实现前后端分离,需要创建一个给前端返回的统一实体,并将返回对象封装进去:
    1. 创建一个maven子项目:cloud-api-commons
    添加pom依赖:

    
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            <artifactId>cloud2020artifactId>
            <groupId>com.atguigu.springbootgroupId>
            <version>1.0-SNAPSHOTversion>
        parent>
        <artifactId>cloud-api-commonsartifactId>
        <properties>
            <java.version>1.8java.version>
        properties>
        <dependencies>
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <optional>trueoptional>
            dependency>
            <dependency>
                <groupId>cn.hutoolgroupId>
                <artifactId>hutool-allartifactId>
                <version>5.1.0version>
            dependency>
        dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2. 创建返回的统一实体
    api-commons
    CommonResult:

    package com.atguigu.springcloud.entities;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author 强浩
     * @version 1.0.0
     * Copyright(c) YTANG All Rights Reserved
     * @className
     * @project 管理系统
     * @date 2021年11月10日
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class CommonResult<T> {
        private Integer code;
        private String  message;
        private T       data;
    
        public CommonResult(Integer code, String message) {
            this(code,message,null);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    Payment:

    package com.atguigu.springcloud.entities;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    /**
     * @author 强浩
     * @version 1.0.0
     * Copyright(c) YTANG All Rights Reserved
     * @className
     * @project 管理系统
     * @date 2021年11月10日
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Payment implements Serializable {
        private Long id;
        private String serial;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3. 多个服务联动开发时多组件通讯的问题

    多个独立的服务间,无法使用直接调用接口的方式访问,需要使用RestTemplate实现两个服务间的调用

    1. 向IOC容器中添加RestTemplate的组件
    @Configuration
    public class RestTemplateConfig {
        @Bean
        public RestTemplate getRestTemplate(){
            RestTemplate restTemplate = new RestTemplate();
            return restTemplate;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 在Controller层中注入组件
    @Resource
    RestTemplate restTemplate;
    
    • 1
    • 2
    1. RestTemplate 可以看到有很多方法,我们可以提取出主要的几种方法是:GET、POST、PUT、DELETE、HEAD、OPTIONS、EXCHANGE、EXECUTE
    @RestController
    public class OrderController {
        public static final String PAYMENT_URL = "http://localhost:8001";
        @Resource
        private RestTemplate restTemplate;
        @GetMapping("/consumer/payment/create")
        public CommonResult<Payment> create(Payment payment){
            //这里将get请求转换为post请求
            return restTemplate.postForObject(PAYMENT_URL + "/payment/create",payment,CommonResult.class);
        }
    
        @GetMapping("/consumer/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
            return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id,CommonResult.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4. 重构服务,抽取公共部分

    1. 将公共部分统一放在一个项目中,并发布到maven仓库中,比如上面的api-commons
    2. 在需要的模块的pom.xml文件中进行引用
  • 相关阅读:
    CorelDRAWX4的C++插件开发(三十九)纯C++插件开发(3)声明变量并暴露导出函数
    计算机设计大赛 深度学习手势识别算法实现 - opencv python
    Spring之美- IOC和AOP
    SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析
    SpringMVC_异常统一处理
    路由器配置DMZ主机映射
    STM32定时器篇——Systick定时器的使用(实现delay延时函数)
    Java程序设计——反射(Java高级应用)
    绑定支付卡表单页面html页面前端源码
    Java项目:基于SSM框架实现的汽车养护保养管理系统【ssm+B/S架构+源码+数据库+开题+毕业论文+任务书】
  • 原文地址:https://blog.csdn.net/QIANG_HAO/article/details/127595683