SpringCloud配置中心技术

举报
tea_year 发表于 2023/12/12 22:34:52 2023/12/12
【摘要】 springcloud config 配置管理服务nacos 配置管理3,具体内容 3.1 springcloud config 3.1.1 简介 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,ser...

springcloud config 配置管理服务

nacos 配置管理

3,具体内容

3.1 springcloud config

3.1.1 简介

配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。


3.1.2 配置中心的作用:

1,微服务中有好多不同的模块,都有自己的配置,可以使用中心化的思想,把所有配置集中化管理,方便管理所有配置

2,配置不同环境(开发dev,测试test,生产prod),简化了更换环境时,更换配置的操作

对于微服务系统来说,一个系统内可能有几十个服务,然后可能会启动上百个实例(访问量大的一般使用集群部署)。可能其中十个服务都需要连接DB,二十个服务都需要连接Redis或者MQ。如果把DB连接url及用户名密码分写配置到各个服务的application.yml文件中,想更改url及用户名密码,将会是一件十分枯燥和容易出错的事情,而且如果DB库更换用户名了话,需要各个服务一个一个去修改,显然是非常不合理的。在微服务系统中,把配置统一放到配置中心服务,然后各个服务到配置中心拉取配置。

3.1.3 服务端实现

准备工作:

1),创建远程仓库

github/gitee要有账号,登录,创建配置文件的仓库

创建仓库:

本地任意位置创建目录,进入目录,右键点git bash here


2),克隆仓库,编写配置并上传

本地克隆仓库,编写配置文件,并且上传

git clone https://gitee.com/yehenxianchou/qy141-microservice-config-repo.git

cd qy141-microservice-config-repo

新建配置文件

git status

git add * 提交到缓存

git status

git commit -m '提交注释' 本地仓库

git push 推送到远程

进入克隆的目录创建文件

文件格式:应用名称+环境变量.yml/properties

orderService-dev.yml

orderService-test.yml

orderService-prod.yml

内容模板:

#当前服务端口号

server:

port: 14121

# servlet:

# #配置上下文对象 访问的项目名称

# context-path: /ordera

#阿里druid连接池配置

spring:

datasource:

druid:

url: jdbc:mysql://localhost:3306/db_qy141?useUnicode=true&characterEncoding=utf8

username: root

password: root

initial-size: 5

max-active: 20

min-idle: 10

max-wait: 10

application:

#当前应用的名称 注册后,注册中心会显示该名称,其他服务调用时,也是使用该名称

name: orderService

cloud:

nacos:

discovery:

server-addr: localhost:8848

mybatis-plus:

# mapper.xml配置

mapper-locations: classpath:mapper/*.xml

configuration:

#控制台日志输出配置

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

#别名包配置

type-aliases-package: com.aaa.os.entity

#swagger配置

swagger:

base-package: com.aaa.os.controller

title: "电商项目-订单模块-订单swagger"

description: "描述"

version: "3.0"

contact:

name: "AAA"

email: "test@163.com"

url: "https://www.baidu.com"

terms-of-service-url: "服务条款:https://www.baidu.com"

#eureka:

# client:

# #eureka客户端注册域地址

# service-url:

# defaultZone: http://localhost:14112/eureka/


创建config项目

1)jar:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-config-server</artifactId>

</dependency>

2) application.yml配置文件:

远程配置:

server:

port: 19999

spring:

cloud:

config:

server:

git:

#配置远程地址

uri: https://gitee.com/yehenxianchou/aiops03_config.git

username: 15036122780

password: nicai521

#配置文件所在目录

search-paths: /**

#跳过ssl安全验证

skip-ssl-validation: true

#分支配置

label: master


本地配置:

server:

  port: 19999

spring:

  profiles:

    #配置文件在本地

    active: native

  cloud:

    config:

      server:

        native:

          #相对路径

          search-locations: classpath:/microservice-config/

          #绝对路径

          #search-locations: file:D:\\springcloud-config


3)启动类:

@EnableConfigServer //开启配置服务功能

4)测试访问:

访问的URL与配置文件的映射关系如下:

orderService - dev master

应用名 {application}、环境名 {profile}、分支名 {label}

localhost:端口号/{application}/{profile}/[label]

http://localhost:19999/orderService/dev/master

localhost:端口号/{application}-{profile}.properties

localhost:端口号/{label}/{application}-{profile}.properties


localhost:端口号/{application}-{profile}.yml

http://localhost:19999/orderService-dev.yml

localhost:端口号/{label}/{application}-{profile}.yml

http://localhost:19999/master/orderService-dev.yml

3.1.4 客户端实现:

1)jar:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-config</artifactId>

</dependency>

2) 新建bootstrap.yml(注掉原来配置文件内容)

spring:

cloud:

config:

#配置的应用名称

name: GoodsServer

#环境名

profile: dev

#指定分支

label: master

#配置中心地址

uri: http://localhost:19999/

bootstrap和application文件的区别:

1)Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。

2) 属性不能被本地相同配置覆盖

3)启动测试


3.2 nacos 配置管理

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

https://nacos.io/zh-cn/docs/what-is-nacos.html

3.2.1 服务端配置:

1)一般配置:

图形界面操作(复制任意一个想交给nacos管理的服务进行配置)

服务端配置:

文件的内容是从客户端application.yml中复制过来!!!


客户端配置:

引入jar:

<!--nacos-config 配置管理客户端 jar-->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>

建编辑bootstrap.yml配置文件:

服务和客户端对应关系:



正确配置:

#在springcloud项目中,同一个项目中存在配置 bootstrap.yml bootstrap.properties ,application.yml,application.properties

# 优先级 bootstrap.yml>bootstrap.properties>application.yml>application.properties

spring:

application:

#配置应用文件的名称,必须和外部配置的dataid 一致

name: order-server

cloud:

nacos:

config:

#配置中心的服务地址

server-addr: localhost:8848

#文件扩展名称配置,如果不配置,默认.properties

file-extension: yml


动态加载配置功能


不同环境配置和切换:


更换不同环境时,只需要改active后的变量名称即可!!


2)自定义 namespace 的配置:

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

可以添加namespace

不同租户:


3) 自定义组的配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。同一项目,不同模块需要隔离可以使用组.

3.2.2 客户端配置:

1) jar:

 <!--nacos-config包-->

        <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

        </dependency>

2) bootstrap配置文件:

1)一般配置

spring:

application:

#和data_id对应

name: orderService.yml

cloud:

nacos:

config:

#配置中心的地址

server-addr: localhost:8848

#配置文件扩展名 默认properties

file-extension: yml


2)添加自定义namespace 客户端需要加配置

spring.cloud.nacos.config.namespace= namespace_id

该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。


3)添加自定义组配置

spring.cloud.nacos.config.group=group_id

配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

4,知识点总结

5,本章面试题

https://blog.csdn.net/m0_37125796/article/details/103358466


bootstrap和application文件的区别:

1)Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。

2) bootstrap引入的外部属性不能被本地相同配置覆盖 application文件可以覆盖 .yml和.properties配置一样属性时, .properties覆盖.yml的属性



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。