配置中心介绍

Spring Cloud Config 为分布式系统的外部配置提供了服务端和客户端的支持方案。在配置的服务端您 可以在所有环境中为应用程序管理外部属性的中心位置。客户端和服务端概念上的Spring Environment 和 PropertySource 抽象保持同步, 它们非常适合Spring应用程序,但是可以与任何语言中运行的应用 程序一起使用。当应用程序在部署管道中从一个开发到测试直至进入生产时,您可以管理这些环境之间 的配置,并确保应用程序在迁移时具有它们需要运行的所有内容。服务器存储后端的默认实现使用git, 因此它很容易支持标记版本的配置环境,并且能够被管理内容的各种工具访问。很容易添加替代的实 现,并用Spring配置将它们插入。 Spring Cloud Config 包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将 配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git。 

Nacos替换Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

应用场景

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立 的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物 理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置 变更是调整系统运行时的行为的有效手段。 如果微服务架构中没有使用统一配置中心时,所存在的问题: - 配置文件分散在各个项目里,不方便维护 - 配置内容安全与权限 - 更新配置后,项目需要重启 nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、 历史版本管理、变更审计)等所有与配置相关的活动。

nacos使用

   首先准备一个微服务项目 这里准备一个练习的项目

 naocs依赖

 

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		</dependency>

在配置文件中进行配置:

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring cloud

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_02

 

   先启动nacos,这里使用的是window版的nacos

    启动项目

 查看项目启动后的端口号是否和上面配置的端口一致

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_03

在浏览器上输入Nacos访问地址http://localhost:8848/nacos ,输入默认账号密码(都是 nacos)

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_04

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_java_05

 

登陆进去在服务列表可以看到刚才配置文件中配置的服务名字显示在列表中说明注册成功

现在在nacos中创建配置文件

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_java_06

把本地项目中的配置文件内容全部注释掉 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_07

 在该服务的pom文件中添加依赖

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

补充:springboot配置文件加载顺序

其实yml和properties文件是一样的原理,且一个项目上要么yml或者properties,二选一的存在。推荐 使用yml,更简洁。 org.springframework.cloud spring-cloud-starter-alibaba-nacos-config #配置中心地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #spring.profiles.active=dev # 该配置影响统一配置中心中的dataId spring.application.name=service-statistics 1 2 3 4 1 2 3 4 5 6 7 bootstrap与application (

1)加载顺序 这里主要是说明application和bootstrap的加载顺序。 bootstrap.yml(bootstrap.properties)先加载 application.yml(application.properties)后加载 bootstrap.yml 用于应用程序上下文的引导阶段。 bootstrap.yml 由父Spring ApplicationContext加载。 父ApplicationContext 被加载到使用 application.yml 的之前。

(2)配置区别 bootstrap.yml 和application.yml 都可以用来配置参数。 bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。 application.yml 可以用来定义应用级别的。

创建bootstrap.properties文件

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_java_08

 

重启项目

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_配置文件_09

 可以看到此时项目的端口号读取的是nacos中配置的8777端口 说明项目读取nacos的配置文件成功

在bootstrap配置文件中开启 


spring.profiles.active=dev


nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_配置文件_10

在nacos中创建spring.profiles.active=dev配置文件

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring cloud_11

发布配置文件重启项目 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_12

 可以看到此时读取的是8666也就是我们新建的配置文件

命名空间切换开发配置环境

在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不 同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下 三个不同的 namespace。以此来实现多环境的隔离

在nacos中创建三个命名空间 dev test prod

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring cloud_13

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_14

 

在配置列表中克隆配置文件

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_配置文件_15

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_16

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_17

 为了便于区分,我们把刚才克隆的dev配置文件端口号更改为8555

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_18

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring cloud_19

 在bootstrap配置文件中添加读取dev配置

spring.cloud.nacos.config.namespace=795de664-a841-4a11-bf25-3b6acdf90ee6


 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_20

重启项目

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_21

可以看到此时项目的端口号又读取的是dev的8555端口

 多配置文件加载

有时候项目中需要读取多个配置文件 每个配置文件放入特定的配置

在nacos的dev命名空间中再新建一个配置文件port.properties只存放端口号,并将刚才原有的那个dev配置文件的端口号注释掉

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_22

 

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_微服务_23

 

在bootstrap配置文件中添加port配置文件的读取

spring.cloud.nacos.config.ext-config[0].data-id=port.properties
spring.cloud.nacos.config.ext-config[0].refresh=true


nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_spring boot_24

 

 重启项目

nacos 配置文件改了 要重启docker吗 nacos 当配置中心 本地文件_java_25

可以看到此时端口号变为port配置文件中的8444