首先祝自己10.24节日加班快乐,本文记录昨夜奋战到凌晨3点的学习笔记

虽然每天如此。。。。学习的时间都是挤出来的


Spring Cloud Config服务端和config客户端

  • 首先祝自己10.24节日加班快乐,本文记录昨夜奋战到凌晨3点的学习笔记
  • spring cloud Config介绍:
  • 通过以上介绍可以了解到,config分服务端和客户端
  • 开始demo新建一个springboot项目(==config服务端==)
  • 那么读到配置之后干嘛用呢?接下来使用
  • 自此springcloud五个核心组件学习完了,接下来就该搞各种小组件和组件的各种骚操作了
  • ★[前4篇文章]()用的[cloud-demo项目git地址](https://gitee.com/s_leilei/cloud-demo.git)
  • ★本文章以及之后新的知识记录用的[crazy-cloud项目git地址](https://gitee.com/s_leilei/crazy-cloud.git)也就是前面的那个demo项目整理了一下,操作一样


spring cloud Config介绍:

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以集中管理所有环境中应用程序的外部属性。
特征:
Spring Cloud Config Server功能:

HTTP,用于外部配置的基于资源的API(名称-值对,或等效的YAML内容)
加密和解密属性值(对称或不对称)
可轻松地使用Spring Boot应用程序嵌入 @EnableConfigServer

Config Client功能(用于Spring应用程序):

绑定到Config Server并Environment使用远程属性源初始化Spring
加密和解密属性值(对称或不对称

以上摘自官网

通过以上介绍可以了解到,config分服务端和客户端

开始demo新建一个springboot项目(config服务端

  1. 新建module依赖如下

    我还想把config注册到eureka中,所以添加了eureka的客户端,完整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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.crazy</groupId>
    <artifactId>c-config-server-8411</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>c-config-server-8411</name>
    <description>config服务端</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  1. 配置文件application.yml
server:
  port: 8411                           # 设置服务提供者的端口号
eureka:
  client:
    service-url:
      defaultZone: http://crazy1.com:8611/eureka/     #刚启动的时候由于没有启动eureka服务可能会报错,也可以不用这个
spring:
  application:
    name: E-config-server                # 网关项目模块所提供服务的名称
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/s_leilei/crazy-cloud-config.git    #git地址(我这里是用的码云)
          username: git用户名
          password: git密码
          skip-ssl-validation: false  #是否一个SSL证书检测的玩意
  1. 启动类注解
package com.crazy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ServerConfigApplication {

    private static final Logger logger = LoggerFactory.getLogger(ServerConfigApplication.class);

    public static void main(String[] args) {
        ApplicationContext apps = SpringApplication.run(ServerConfigApplication.class, args);
        Environment env = apps.getEnvironment();
        logger.info(">>>>>>config服务启动成功");
        logger.info(">>>>>>地址: http://{}:{}",env.getProperty("spring.cloud.client.ip-address"),env.getProperty("server.port"));
        logger.info("启动成功之后,测试直接通过config-server服务去读取git资源:http://localhost:8411/crazy-client/test/develop");
        //url crazy-clinet 资源名  test 文件后缀  develop 分支
    }

}
  1. 项目启动
  2. 测试通过自己启动的192.168.241.141:8411去读取git上的配置文件。
先看git上的配置文件:如下

spring cloud config要第一个启动吗 spring cloud config server_eureka


spring cloud config要第一个启动吗 spring cloud config server_spring boot_02


spring cloud config要第一个启动吗 spring cloud config server_spring boot_03


spring cloud config要第一个启动吗 spring cloud config server_spring_04


测试能否通过自己的config服务读取到git上的配置文件

第一种访问方式:http://本地config服务IP:端口/git文件名/profilesName(dev或test或其他)/要访问的分支

http://localhost:8411/crazy-client/test/develop

spring cloud config要第一个启动吗 spring cloud config server_spring boot_05


spring cloud config要第一个启动吗 spring cloud config server_spring boot_06


第二种访问方式:http://本地config服务IP:端口/git仓库分支/文件名-dev或者test或者其他.yml
http://localhost:8411/develop/crazy-client-dev.yml

spring cloud config要第一个启动吗 spring cloud config server_java_07


spring cloud config要第一个启动吗 spring cloud config server_spring_08

  1. 自此,通过本地的config服务已经成功读取到git仓库里的地址了。总结:

1、新建了一个项目来当作config服务端用来链接自己配置文件存放的地方(我用的码云)。
2、配置了自己的git仓库项目地址。
3、启动之后,通过访问自己本地的config服务去读取码云上存放的配置文件
4、官网上给的访问方式:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

那么读到配置之后干嘛用呢?接下来使用

  1. 搞一个eureka的服务端来当作config的客户端。(先看之前的配置,在这一章的配置)

向之前服务的注册发现与消费说的, 如果配置注册中心搞集群部署的话,eureka的配置一大堆,以下只是简单的注册中心配置:

spring cloud config要第一个启动吗 spring cloud config server_eureka_09

eureka的配置还有很多,这里只做测试,配置基本的。 所以我们要把这个配置丢到git上去(可以私仓。不会被别人看到。。。) 先看看git上的关于eureka的配置文件crazy-eureka.yml

spring cloud config要第一个启动吗 spring cloud config server_eureka_10


为了区分,端口不同,eureka服务名不同。


开始新建moudle→

eureka服务端:当作config客户端


新建springboot项目依赖如下:


spring cloud config要第一个启动吗 spring cloud config server_spring boot_11

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.crazy</groupId>
    <artifactId>c-config-eureka-8611</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>c-config-eureka-8611</name>
    <description>config配置eureka的模块</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

由于config服务端现在能拿到git上的配置,我们让eureka去从config服务端读取git上的配置,所以eureka的配置可以很少。两个配置文件:application.yml(应用级别配置),bootstrap.yml(系统级别配置)如下

bootstrap.yml配置去哪里拿配置。就像上面的浏览器去拿一样

spring cloud config要第一个启动吗 spring cloud config server_spring_12


application.yml配个名字吧。

spring cloud config要第一个启动吗 spring cloud config server_eureka_13


然后eureka服务的主启动类

spring cloud config要第一个启动吗 spring cloud config server_java_14


启动:我们配置的eureka去http://crazy1.com:8411(本地的config服务。我的localhost是crazy1.com)拿配置。拿的具体配置是develop分支的crazy-eureka文件(不要后缀名)的profile为dev的配置

spring cloud config要第一个启动吗 spring cloud config server_spring_15


git上crazy-eureka.yml的dev配置的端口是8611,所以这个eureka启动起来就是8611的端口

并且显示了,config from server at : http://crazy1.com:8411。配置信息来自config服务端,实际上是config服务段去git上读取了配置给了eureka

访问:localhost:8611

spring cloud config要第一个启动吗 spring cloud config server_spring boot_16


再看一眼git上的eureka的配置

spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_17


成功


比如eureka打成war包了,可以通过命令参数去修改让他去读另一个配置比如通过maven讲eureka服务打成jar包

spring cloud config要第一个启动吗 spring cloud config server_spring_18


spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_19


spring cloud config要第一个启动吗 spring cloud config server_spring_20


把jar扔到桌面去,通过java -jar *.jar [--spring]启动并修改配置

我们让他去执行test不执行dev了。打包的时候是dev啊

桌面shift+右键打开cmd命令窗口或者powershell窗口:

spring cloud config要第一个启动吗 spring cloud config server_spring boot_21


打包的时候是dev,通过命令让他去执行test的配置,应该启动完之后是下面这个配置才对

spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_22


spring cloud config要第一个启动吗 spring cloud config server_eureka_23


访问测试:

spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_24


如果直接在git上改一下配置,让eureka8612也注册到8611里面去会怎么样呢???

好奇宝宝的心态。。。搞一下

git在线编辑,我们改了如下属性:

spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_25


没弄热部署插件工具,直接手动重启一下吧。。。。。

spring cloud config要第一个启动吗 spring cloud config server_java_26


一样的jar包一样的命令。走起

spring cloud config要第一个启动吗 spring cloud config server_eureka_27


还是这个地址,看看去

spring cloud config要第一个启动吗 spring cloud config server_spring_28


改的配置让eureka去挂到了crazy1.com的eureka注册中心,并且发现了eureka8611中的config服务端。再看看第一个eureka呢

大写的握草。好神奇哦

spring cloud config要第一个启动吗 spring cloud config server_1024程序员节_29


搞定。手工,完事再去吧sys服务和user服务多搞几个。

自此springcloud五个核心组件学习完了,接下来就该搞各种小组件和组件的各种骚操作了

前面4篇用的demo整理了一下。
新建了一个项目叫crazy-cloud 跟之前的一样。无非多了几个相同的模块。 如下:

spring cloud config要第一个启动吗 spring cloud config server_eureka_30