SpringCloud配置中心技术
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的属性
- 点赞
- 收藏
- 关注作者
评论(0)