SpringCloud 学习笔记总结 (一)

git代码地址:https://gitee.com/it-sherlock/java-project-template

介绍SpringCloud,以及搭建环境。

1. 基于分布式的微服务架构


在这里插入图片描述

SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体。俗称:微服务全家桶。

整体架构图:
在这里插入图片描述

2. SpringBoot 和 SpringCloud 版本


之前SpringCloud有D版和SpringBoot 1.X版配合搭建,这两个版本已经过时了。

现在使用SpringCloud H版和SpringBoot 2.X版。


SpringCloud的版本命名规则:
在这里插入图片描述


SpringBoot和SpringCloud有严格的版本对应,他们之前不同版本可能存在冲突!因此必须严格按照官网来对应。
在这里插入图片描述

更详细的版本对应查看网址:http://start.spring.io/actuator/info

之后使用,JSON处理工具:tool.lu 格式化出来:
在这里插入图片描述


之后学习的环境搭建版本:
在这里插入图片描述

3. 由SpringCloud官方参考文档 来决定使用哪个版本的SpringBoot


在这里插入图片描述
在这里插入图片描述

3. SpringCloud 维护升级以及每个服务对应的技术架构


以下红叉的是已经停止更新维护的。


服务注册中心:
在这里插入图片描述


服务调用:
在这里插入图片描述


服务降级(熔断):
在这里插入图片描述


服务网关:
在这里插入图片描述


服务配置:
在这里插入图片描述


服务总线:

在这里插入图片描述


总体上,技术图:

在这里插入图片描述

4. 微服务cloud整体 聚合父工程Project


因为使用的是maven环境,就是约定 > 配置 > 编码


第一步:创建maven父工程项目,选择maven版本。
在这里插入图片描述


第二步:修改整个项目环境的字符编码集,改为UTF-8。
在这里插入图片描述

Transparent native-to-ascii conversion的意思是:自动转换ASCII编码。
在这里插入图片描述


第三步:注解生效激活。

  • 启动注解处理:
    在这里插入图片描述

第四步:java编辑版本选择8版本。
在这里插入图片描述


第五步:File Type 过滤,随意设置,这个就是过滤那些像.idea ,.iml等等的这种和代码本身没有直接关联的可以不让他们显示。
在这里插入图片描述
在这里插入图片描述

5.微服务cloud整体 父工程pom.xml文件配置


第一步:packaging设置为pom,父工程都会设置为pom。


第二步:除了pom,像src文件夹都删除掉。
在这里插入图片描述


第三步:配置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.itholmes.springcloud</groupId>
  <artifactId>cloud2020</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--父工程打包方式一定是pom-->
  <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>
    <log4j.version>1.2.17</log4j.version>
    <lombk.version>1.16.18</lombk.version>
    <mysql.version>8.0.18</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

  <!--dependencyManagement的作用:子模块继承之后,提供的作用:锁定版本+子module不用写groupId和version-->
  <dependencyManagement>
    <dependencies>

      <!--springboot 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 alibaba 2.1.0 RELEASE-->
      <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>

      <!--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>

  <name>Maven</name>
  <!-- FIXME change it to the project's website -->
  <url>http://maven.apache.org/</url>
  <inceptionYear>2001</inceptionYear>
  
</project>

可以跳过单元测试的按钮:
在这里插入图片描述

6. SpringBoot 整合mybatis


type-aliases-package可以生命别名!!

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.itholmes.springcloud.entities # 所有Entity别名类所在包

useGeneratedKeys=“true” 和 keyProperty主键 从而返回值就是主键ID值:

  • keyProperty中对应的值是实体类的属性,而不是数据库的字段。
<insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
    insert into payment (serial) values (#{serial})
</insert>

7. 热部署 Devtools


第一步:Adding devtools 。

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <version>2.7.0</version>
</dependency>

第二步:Adding plugin。

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
<!--        <version>2.6.7</version>-->
      <configuration>
      	<!--fork 设置为 true,实际上是会在 maven 编译的时候新创建一个虚拟机执行。这个新创建 JVM 就是这里的 fork。-->
        <fork>true</fork>
        <addResources>true</addResources>
      </configuration>
    </plugin>
  </plugins>
</build>

第三步:Enabling automatic build。设置idea。
在这里插入图片描述

第四步:update the value of。

在pom.xml文件执行快捷键:
在这里插入图片描述
在这里插入图片描述

第五步:重启idea,这样就会热部署自动化配置了。

8. Dashboard的使用


启动多个项目的时候,就使用idea的Dashboard。
在这里插入图片描述

在这里插入图片描述


如何让Run Dashboard显示到idea的下方任务栏中:

第一步:打开父项目对应的.idea目录,找到workspace.xml文件。
在这里插入图片描述
第二步:添加配置如下中:
在这里插入图片描述
第三步:重启idea就可以了。

9. 公用模块-common


一般多个微服务都会公用一个公用模块项目(一般叫做common)。

这个项目存放的一般都是pojo类,Utils工具类等等公共代码。通过maven的install或者deploy的特性,通过GAV添加对应依赖,从本地或者私服来获得该jar包。

10. Hutool包的使用


Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率。

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.6.5</version>
</dependency>

11. Maven项目 如何转成SpringBoot项目


第一步:导入SpringBoot相关依赖。

<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.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>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

第二步:在Resource目录下,创建application.yml文件。
在这里插入图片描述

第三步:在创建对应的SpringBoot启动Main方法。

package com.itholmes.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderMain80 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderMain80.class,args);
    }
}

12. @EnableDiscoveryClient注解的使用


作用:
1、可以获取服务信息
2、用于向consul或者zookeeper作为注册中心的时候提供注册服务(就是提供注册服务的)

可以通过微服务名称,获取注册中心的各种信息。

// DiscoveryClient来自于org.springframework.cloud.client.discovery.DiscoveryClient
@Resource
private DiscoveryClient discoveryClient;

@GetMapping(value = "/payment/discovery")
public Object discovery(){
    
    

    // 获取微服务的名称信息
    List<String> services = discoveryClient.getServices();
    for (String element : services) {
    
    
    	// 日志信息,也会在控制台打印出来
        log.info("******element:"+element);
    }

    // 获取一个微服务名称下面的所有微服务,毕竟一个微服务名称,可以有多个微服务
    List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance instance : instances) {
    
    
    	// 日志信息,也会在控制台打印出来
        log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
    }
    return this.discoveryClient;
}

猜你喜欢

转载自blog.csdn.net/IT_Holmes/article/details/125023894