栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Cloud Config 笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Cloud Config 笔记

Spring Cloud Config
1. Quick Start

首先,启动服务,如下:

$ cd spring-cloud-config-server
$ ../mvnw spring-boot:run

服务是一个 Spring Boot 程序,你也可以从 IDE 运行。

接下来,试验一下客户端,如下:

$ curl localhost:8888/foo/development
{"name":"foo","label":"master","propertySources":[
  {"name":"https://github.com/scratches/config-repo/foo-development.properties","source":{"bar":"spam"}},
  {"name":"https://github.com/scratches/config-repo/foo.properties","source":{"foo":"bar"}}
]}

定位属性资源的默认策略是去克隆一个 git 存储库(位于 spring.cloud.config.server.git.uri),并使用它去实例化一个迷你的 SpringApplication。

 

1.1. Client Side Usage

要在应用程序中使用这些功能,你可以将其构建为依赖于 spring-cloud-config-client 的Spring Boot 项目。最简便的方法是使用 Spring Boot 启动器 org.springframework.cloud:spring-cloud-starter-config。对于 maven 用户以及 Gradle 和 Spring CLI 用户的 Spring IO 版本管理属性文件,也有一个父 POM 和 BOM(spring-cloud-starter-parent)。

默认地,如果应用名称没有设置,则会使用 application。如果要修改默认行为,可以使用 spring.application.name 进行修改:

spring.application.name: myapp
  • 设置属性 ${spring.application.name} 不要使用保留字 application- 作为应用名前缀,防止无法解析出正确的资源。

 

2. Spring Cloud Config Server

Spring Cloud Config Server 提供了一个用于外部配置的 HTTP 资源 API。通过使用 @EnableConfigServer 注解,服务就能嵌入到 SpringBoot 应用中。迷你应用的 Environment 用于枚举属性源并在 JSON 端点发布他们。

当 application 被以 spring.config.name 注入在 SpringApplication 时,profile 是一个活跃的配置(或者以逗号分隔的列表),label 是可选的 git 标签(默认是 master)。

 

2.1. Environment Repository

在什么地方存储配置服务的配置数据?管理此行为的策略是 EnvironmentRepository,服务 Environment 对象。这个 Environment 是 Spring Environment 的浅拷贝(包括 propertySources 作为主要功能)。Environment 资源是三个变量的参数化:

  • {application},映射到 spring.application.name
  • {profile},在客户端映射到 spring.profiles.active
  • {label}

存储库的实现通常表现得像一个 Spring Boot 程序,它从 spring.config.name 等于 {application} 以及 spring.profiles.active 等于 {profiles} 中加载配置文件。配置文件的优先规则也与常规的 Spring Boot 程序相同:激活的配置文件优先于默认值,如果又多个配置文件,则选择最后一个(类似向 Map 添加条目)。

如果存储库是基于文件的,那么服务器将从 application.yml 和 foo.yml 中创建一个 Environment。如果 YAML 文件在它们内部有指向 Spring 配置文件的文档,那么会使用更高的优先级。如果有特定的配置 YAML 文件,那么这些文件也以比默认值更高的优先级而使用。高优先级转换为在 Environment 中提前列出的 PropertySource。

2.1.1. Git Backend Skipping SSL Certificate Validation

通过将 git.skipSslValidation 属性设置为 true(默认为 false),可以禁用配置服务器对 Git 服务器的 SSSL 证书校验:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.com/my/repo
          skipSslValidation: true
Setting HTTP Connection Timeout 2.1.6. Sharing Configuration With All Applications 2.1.6.1. File based Repositories

使用基于文件的存储库,在所有客户端应用之间共享文件名为 application* 的资源(application.properties, application.yml, application-*.properties 等)。你可以使用具有这些文件名的资源来进行全局默认配置,并且根据需要让它们被应用特定的文件覆盖。

属性覆盖功能也可以用于设置全局默认,应用程序允许在本地覆盖它们。

使用 native 配置文件(本地文件系统后端),你应该使用不属于服务自己的配置的指定搜索路径。否则,位于默认搜索路径中的 application* 资源会被移除,因为它们是服务的一部分。

 

2.1.7. JDBC Backend

Spring Cloud Config 服务支持 JDBC 作为配置属性的后端。你可以通过添加 spring-jdbc 到类路径,并使用 jdbc 配置,或者添加 JdbcEnvironmentRepository 该 bean 来启用此功能。

你可以通过设置 spring.cloud.config.server.jdbc.enabled=false 来禁用 JdbcEnvironmentRepository 的自动配置。

数据库需要有一个名为 PROPERTIES 的表,列为 APPLICATION, PROFILE, LABEL, KEY, VALUE。所有的字段都是 Java 的 String 类型,因此你可以定义为 VARCHAR。属性值表现与它们来自 Spring Boot 属性文件 {application}-{profile}.properties 相同,包括所有的编码与解码,这些稍后会进行处理(即不会直接再存储库实现中)。

 

2.2. Health Indicator

配置服务器附带一个健康指示器,用于检查配置的 EnvironmentRepository 是否正常工作。默认地,它会请求 EnvironmentRepository 一个名为 app 的应用,default 的配置,由 EnvironmentRepository 实现提供的默认标签。

通过 health.config.enabled=false,你可以禁用健康指示器。

2.3. Security 4. Serving Plain Text

不使用 Environment 抽象,你的应用可能需要对其环境量身定制的通用普通文本配置文件。Config Server 通过一个位于 /{application}/{profile}/{label}/{path} 的额外端点提供这些,其中,application,profile,label 与常规的环境端点有相同含义,但是 path 是一个文件名的路径(例如 log.xml)。此端点的源文件以与环境端点相同的方式定位。相同的搜索路径被用于 properties 和 YAML 文件。但是,仅返回第一个被匹配的资源,而不是聚合所有资源。

在资源被定位之后,以常规格式的占位符(${...})会被使用提供的 application name,profile,label 解析。以这种方式,资源端点与环境端点紧密集成。

 

5. Embedding the Config Server

配置服务最好以独立应用运行。但是,如果你需要,你也可以将其嵌入到另一个应用中。使用 @EnableConfigServer 注解,一个可选的属性 spring.cloud.config.server.bootstrap 在这种情况下是有用的。这是一个标记,指示该服务是否应该从它自己的远程存储库配置自己。默认地,该标记是关闭的,因为它可以延迟启动。但是,当嵌入另一个应用中时,将与任何其他应用程序以一样的方式启动是有意义的。将 spring.cloud.config.server.bootstrap 设置为 true 时,还必须使用符合环境存储库配置。

6. Push Notifications and Spring Cloud Bus

许多源代码存储库提供者(如 Github,Gitlab,Gitea, Gitee, Gogs, or Bitbucket)通过 webhook 通知你存储库中的更改。你可以通过提供者的用户接口配置 webhook,以 URL 和一组你感兴趣的事件。

当 webhook 被激活时,配置服务会针对它认为可能已经更改的应用程序发送 RefreshRemoteApplicationEvent 。变更检测是策略化的。但是,默认地,它会寻找与应用程序名称匹配的文件中地变更。

7. Spring Cloud Config Client

Spring Boot 应用可以立即使用 Spring Config 服务。

 

7.1. Config First Bootstrap

类路径上拥有 Spring Cloud Config Client 的应用程序,默认的行为是:当配置客户端启动时,它会绑定到 Config Server(通过 spring.cloud.config.uri 引导配置属性),并使用远程属性源初始化 Spring 的 Environment。

此行为的最终结果是,所有希望消费 Config Server 的客户端需要一个 bootstrap.yml,其中需要在 spring.cloud.config.uri 中配置好服务地址(默认是 http://localhost:8888)。

7.2. Discovery First Bootstrap 7.3. Config Client Fail Fast 7.4. Config Client Retry 7.5. Locating Remote Configuration Resources

Config Service 从 /{application}/{profile}/{label} 供应属性源,在客户端应用中默认的绑定如下:

  • “application”=${spring.application.name}
  • “profile”=${spring.profiles.active}
  • “label”=“master”

你可以通过设置 spring.cloud.config.* 来覆盖它们(此处 * 表示 name, profile, label)。

label 对于回滚到之前的配置版本比较有用,使用默认的 Config Server 实现,它可以是 git label,分支名,commit ID。

label 也可以用逗号分隔的列表表示,在这种情况下,列表中的项目会逐个尝试,直至成功(即只有一个有效)。当工作在功能分支上时,此行为可能比较有用,例如,你可能希望将 label 与你的分支对齐,但使其可选,在这种情况下,你可以使用 spring.cloud.config.label=myfeature,develop。

7.6. Specifying Multiple Urls for the Config Server

 

7.7. Configuring Timeouts

配置超时阈值:

  • 读取超时:spring.cloud.config.request-read-timeout
  • 连接超时:spring.cloud.config.request-connect-timeout

 

7.8. Security

如果你使用 HTTP Basic 安全验证,客户端需要知晓密码(如果不是默认的,还需要用户名)。你可以通过配置服务的 URI 指定用户名和密码,或者通过 username 和 password 属性:

spring:
  cloud:
    config:
     uri: https://user:secret@myconfig.mycompany.com
spring:
  cloud:
    config:
     uri: https://myconfig.mycompany.com
     username: user
     password: secret

spring.cloud.config.username 和 spring.cloud.config.password 会覆盖 URI 里的值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673123.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号