Spring Cloud(H版)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!

Posted 是阿岚呐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud(H版)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!相关的知识,希望对你有一定的参考价值。

1. 微服务架构理论

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tjPWmmpo-1619837391777)(E:\\学习笔记\\图片\\image-20201019134302836.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LdaZgyUq-1619837391779)(E:\\学习笔记\\图片\\image-20201019134502724.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXwGAeeu-1619837391780)(E:\\学习笔记\\图片\\image-20201019134832352.png)]



1.1. SpringCloud简介

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mt9XOLHL-1619837391782)(E:\\学习笔记\\图片\\image-20201019134723201.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVWFRFyR-1619837391783)(E:\\学习笔记\\图片\\image-20201019134932544.png)]



1.2. SpringCloud技术栈

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6HEZhhYK-1619837391785)(E:\\学习笔记\\图片\\image-20201019135425161.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuGEPEUM-1619837391785)(E:\\学习笔记\\图片\\image-20201019135542664.png)]




2. 环境搭建

2.1. Boot和Cloud版本选择

  • 依赖关系:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYDO627a-1619837391786)(E:\\学习笔记\\图片\\image-20201019140734313.png)]

  • 最终定型

  • Boot已经有2.2.4而且符合规范,为啥要选2.2.2?

    官网推荐



2.2. Cloud组件停更说明

  • 停更引发的 “升级惨案”

    • 停更不停用

    • 变更

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYTLWLND-1619837391787)(E:\\学习笔记\\图片\\image-20201019142526851.png)]



2.3. 父工程Project空间新建

  • 微服务Cloud整体聚合父工程Project



2.4. 父工程pom文件

<?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.atguigu.springcloud</groupId>
    <artifactId>cloud2020</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!--统一管理jar包版本-->
    <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.18.10</lombok.version>
            <log4j.version>1.2.17</log4j.version>
            <mysql.version>5.1.47</mysql.version>
            <druid.version>1.1.16</druid.version>
            <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>

    <!--子模块继承之后,提供作用:锁定版本+子module不用谢groupId和version-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </dependency>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud 阿里巴巴-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- druid-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>


2.5. DependencyManagerment和Dependencies

  • DependencyManagerment:

    • Maven使用dependencyManagement元素来提供了一种管理依赖版本号的方式。
    • 通常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素
    • 使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个dependencyManagement元素中指定的版本号。
    • 这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改﹔另外如果某个子项目需要另外的一个版本,只需要声明version就可。
    • dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
    • 如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
  • 跳过单元测试:




3. 项目初始模块搭建

3.1 支付模块

3.1.1 支付模块搭建(上)

微服务模块:

  • 建module

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksgvtI5p-1619837391788)(E:\\学习笔记\\图片\\image-20201019164020294.png)]

  • 改pom

    <?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>cloud2020</artifactId>
            <groupId>com.atguigu.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-provider-payment8081</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!--mysqL-connector-java-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!--jdbc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
    
    
        </dependencies>
    
    
    </project>
    
  • 写yml

    server:
      port: 8001
    
    spring:
      application:
        name: cloud-payment-service
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource     #当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver    #mysqL驱动包
        url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: 123456
    
    
    mybatis:
      mapperLocations:  classpath:mapper/*.xml
      type-aliases-package: com.atguigu.springcloud.entities   #所有Entity别名类所在包
    
  • 主启动类

    package com.atguigu.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class PaymentMain8001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain8001.class,args);
        }
    }
    
  • 业务类



3.1.2 支付模块搭建(中)

业务类:

  • 建表sql

    CREATE TABLE `payment`(
    `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `serial` VARCHAR(200) DEFAULT '',
    PRIMARY KEY (`id`)
    )ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    
  • entities

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXFF5eN3-1619837391789)(E:\\学习笔记\\图片\\image-20201019195441201.png)]

    package com.atguigu.springcloud.entities;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class CommonResult<T> {
        private Integer code;
        private String message;
        private T date;
    
        public CommonResult(Integer code,String message){
            this(code,message,null);
        }
    }
    
  • dao

    • 接口PaymentDao

      public int add(Payment payment);
      public Payment getPaymentById(@Param("id") Long id);
      
    • mybatis映射文件PaymentMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.atguigu.springcloud.dao.PaymentDao">
          
          <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
              insert into payment(serial) values(#{serial});
          </insert>
          
          <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
              <id column="id" property="id" jdbcType="BIGINT"/>
              <id column="serial" property="serial" jdbcType="VARCHAR"/>
          </resultMap>
          <select id="getPaymentById" parameterType="Long" resultType="BaseResultMap">
              select * from payment where id=#{id};
          </select>
          
      </mapper>
      
  • service

     public interface PaymentService {
         public int add(Payment payment);
         public Payment getPaymentById(@Param("id") Long id);
     }
    
     @Service
     public class PaymentServiceImpl implements PaymentService {
         RabbitMQ!女朋友看了都会的超详细保姆级附源码笔记!看完还不会请砍我!

    RabbitMQ!女朋友看了都会的超详细保姆级附源码笔记!看完还不会请砍我!

    RabbitMQ!女朋友看了都会的超详细保姆级附源码笔记!看完还不会请砍我!

    RabbitMQ!女朋友看了都会的超详细保姆级附源码笔记!看完还不会请砍我!

    小朋友看了都会的二叉树,你确定不来看看吗?

    小学生看了都会的Apache配置虚拟主机教程