目录

一、springCloud核心组件config

二、springCloud配置中心

           一、创建新模块,名叫config-client,继承父项目依赖

           二、新增配置文件,使得原始文件依赖新文件

           三、在nacos配置中心,新增两个配置中心,一个是私有配置中心,另一个是共享配置中心 

           四、将模块进行打包运用,使配置中心更加灵活

                       1、将项目进行打包 

                       2、找到打包后的jar包所在地,并拖取到桌面

                       3、使用cmd进入到desktop中运行此jar包

           五、进行远程配置读取

           六、进行切分环境配置


一、springCloud核心组件config

 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。

由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的

Spring Cloud 提供了 ConfigServer来解决这个问题.

Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config 分为服务端和客户端两部分。

 服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置 信息,加密/解密 信息等访问接口。

客户端则是通过制定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心 获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并 且可以通过git客户端工具来方便的管理和访问配置内容

一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同: 不同环境不同配置:例如数据源在不同的环境(开发,测试,生产)是不同的,可以通过配置中心 运行期间可以动态调整。例如根据各个微服务的负载状况,动态调整数据源连接池大小或者熔断阀 值,并且调整时不停止微服务(配置修改后可以自动更新) 

 config的作用:

以一个场景来讲解config的作用,比如现在在做一个团队项目,项目中有一个核心配置文件,组内中几个组员都是使用该配置文件,如果组长将项目配置文件进行更改之后,组员就要重新导入组长的文件,并且要重新启动项目,这很麻烦,这时候config就起到的作用,组长在nacos上进行注册服务之后,组长更新了文件之后,config就会进行自动更新,然后组员重新刷新文件,组员就可以用了。

二、springCloud配置中心

           一、创建新模块,名叫config-client,继承父项目依赖

在父项目中导入nacos依赖以及bootstrap依赖,使得nacos成为配置中心,

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

           二、新增配置文件,使得原始文件依赖新文件

bootstrap.yml:

server:
  port: 8084
spring:
  application:
    # 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定data-id
    # 跟服务名相同的data-id的配置文件,称之为默认的配置文件
    # 除了默认的配置文件,其他配置文件必须写上后缀
    name: config-client
  cloud:
    nacos:
      discovery:
        #服务中心
        server-addr: 127.0.0.1:8848
        # username: nacos
        # password: nacos
      config:
        #配置中心
        prefix: ${spring.application.name}
        #指定nacos配置中心地址
        server-addr: 127.0.0.1:8848
        file-extension: yml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
        #namespace: 4d3f7efb-129b-44aa-b786-25762ef8e66d  # 使用的 nacos 的命名空间,默认为 null
        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
        # 共享配置集数组
        shared-configs:
          - data-id: config-redis.yml
            group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
            refresh: true # 是否自动刷新配置,默认为 false

而原始文件中内容为空:

为什么要使用bootstrap.yml文件:

SpringBoot默认支持properties和YAML两种格式的配置文件。

bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使 用来配置application.yml中使用到参数等

application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。

bootstrap.yml 先于 application.yml 加载

           三、在nacos配置中心,新增两个配置中心,一个是私有配置中心,另一个是共享配置中心 

注意:

           四、将模块进行打包运用,使配置中心更加灵活

目的:使的nacos更加灵活,方便开发

                       1、将项目进行打包 

                       2、找到打包后的jar包所在地,并拖取到桌面

找到jar包的两种方式

                                1、在本模块中target找到jar包

                                2、在本地仓库的依赖中找到jar包 

                       3、使用cmd进入到desktop中运行此jar包

优点:就可以手动的在配置模块的启动类中进行启动

回车即可运行

           五、进行远程配置读取

新建一个读取类:并且加入在类上加上注解

@RestController
@RefreshScope

package com.zj.configclient;


import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class TestController {
    @Value("${email.host}")
    private String host;
    @Value("${email.username}")
    private String username;
    @Value("${email.password}")
    private String password;
    @Value("${redis.hosts}")
    private String hosts;
    @Value("${redis.port}")
    private String port;


    @Autowired
    private EmailProperties emailProperties;

    @RequestMapping("/test01")
    public String test01(){
        StringBuffer sb=new StringBuffer("");
        sb.append("<b>host</b>:"+host);
        sb.append("<b>username</b>:"+username);
        sb.append("<b>password</b>:"+password);
        sb.append("<b>emailProperties</b>:"+emailProperties);
        sb.append("<b>hosts</b>:"+hosts);
        sb.append("<b>port</b>:"+port);
        return sb.toString();
    }


    @Configuration
    @ConfigurationProperties(prefix = "email")
    @Data
    public class EmailProperties{
        private String host;
        private String username;
        private String password;
    }
}

里面有两种读取方式:也就是yml注入

第一种:用value形式读取

    @Value("${email.host}")
    private String host;
    @Value("${email.username}")
    private String username;
    @Value("${email.password}")
    private String password;
    @Value("${redis.hosts}")
    private String hosts;
    @Value("${redis.port}")
    private String port;


    @RequestMapping("/test01")
    public String test01(){
        StringBuffer sb=new StringBuffer("");
        sb.append("<b>host</b>:"+host);
        sb.append("<b>username</b>:"+username);
        sb.append("<b>password</b>:"+password);
        sb.append("<b>emailProperties</b>:"+emailProperties);
        sb.append("<b>hosts</b>:"+hosts);
        sb.append("<b>port</b>:"+port);
        return sb.toString();
    }

第二种:新建一个资源类来读取:

    @Configuration
    @ConfigurationProperties(prefix = "email")
    @Data
    public class EmailProperties{
        private String host;
        private String username;
        private String password;
    }

运行结果:

           六、进行切分环境配置

在一个大的项目中,不可能只有一个环境,并且是有多个环境

新建两个环境,一个叫dev(开发环境),一个叫test(测试环境),内容和默认环境中的一样,可以更加config-redis中的内容:

以dev为例:

dev中的config-client:

dev中的config-redis:

之后就是test环境的中的配置,和dev中的配置一模一样。

因为自己已经配置好了环境,那么将bootstrap文件中的内容环境空间注释掉:

用cmd进行测试:

 java -jar xx.jar --spring.cloud.nacos.config.namespace=xxx

此编码语句用来更新环境配置中的内容,也就是可以实现组长改变项目中环境内容,组员就可以及时更新

现在是运行的是test环境的内容

更改配置中的内容时:

然后进行刷新:

 配置成功。

今天的知识就分享到这里了,希望对你有帮助

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐