资讯专栏INFORMATION COLUMN

Spring Cloud 参考文档(Spring Cloud Config Client)

DevWiki / 518人阅读

摘要:应用程序可以立即利用或应用程序开发人员提供的其他外部属性源,它还提取了一些与变化事件相关的额外有用特性。标签也可以以逗号分隔列表的形式提供,在这种情况下,列表中的项目将逐个尝试,直到成功为止,在处理特性分支时,此行为非常有用。

Spring Cloud Config Client

Spring Boot应用程序可以立即利用Spring Config Server(或应用程序开发人员提供的其他外部属性源),它还提取了一些与Environment变化事件相关的额外有用特性。

配置优先Bootstrap

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

这种行为的最终结果是,所有想要使用Config Server的客户端应用程序都需要一个bootstrap.yml(或环境变量),其服务器地址在spring.cloud.config.uri中设置(默认为“http://localhost:8888" )。

发现优先Bootstrap

如果你使用DiscoveryClient实现,例如Spring Cloud Netflix和Eureka Service Discovery或Spring Cloud Consul,你可以将Config Server注册到Discovery Service,但是,在默认的“配置优先Bootstrap”模式下,客户端无法利用注册。

如果你更喜欢使用DiscoveryClient来定位Config Server,可以通过设置spring.cloud.config.discovery.enabled=true(默认值为false)来实现,这样做的最终结果是客户端应用程序都需要具有适当发现配置的bootstrap.yml(或环境变量)。例如,使用Spring Cloud Netflix,你需要定义Eureka服务器地址(例如,在eureka.client.serviceUrl.defaultZone中),使用此选项的代价是启动时额外的网络往返,以查找服务注册,好处是,只要Discovery Service是固定点,Config Server就可以更改其坐标。默认服务ID是configserver,但你可以通过设置spring.cloud.config.discovery.serviceId在客户端上更改它(在服务器上,以通常的方式提供服务,例如通过设置spring.application.name) 。

发现客户端实现都支持某种元数据映射(例如,我们为Eureka提供了eureka.instance.metadataMap),可能需要在其服务注册元数据中配置Config Server的一些额外属性,以便客户端可以正确连接。如果使用HTTP Basic保护Config Server,则可以将凭据配置为userpassword,此外,如果Config Server具有上下文路径,则可以设置configPath,例如,以下YAML文件用于作为Eureka客户端的Config Server:

bootstrap.yml

eureka:
  instance:
    ...
    metadataMap:
      user: osufhalskjrtl
      password: lviuhlszvaorhvlo5847
      configPath: /config
Config Client快速失败

在某些情况下,如果服务无法连接到Config Server,你可能希望服务启动失败,如果这是所需的行为,请将bootstrap配置属性spring.cloud.config.fail-fast=true设置为使客户端停止并显示异常。

Config Client重试

如果你预期配置服务器在应用程序启动时偶尔可能不可用,你可以在失败后继续尝试。首先,你需要设置spring.cloud.config.fail-fast=true,然后,你需要在类路径中添加spring-retryspring-boot-starter-aop,默认行为是重试六次,初始回退间隔为1000毫秒,后续回退的指数乘数为1.1,你可以通过设置spring.cloud.config.retry.*配置属性来配置这些属性(和其他属性)。

要完全控制重试行为,请添加一个类型为RetryOperationsInterceptor@Bean,其ID为configServerRetryInterceptor,Spring Retry有一个RetryInterceptorBuilder支持创建它。
查找远程配置资源

Config Service从/{name}/{profile}/{label}提供属性源,其中客户端应用程序中的默认绑定如下:

“name” = ${spring.application.name}

“profile” = ${spring.profiles.active}(实际上是Environment.getActiveProfiles()

“label” = “master”

设置属性${spring.application.name}时,不要在应用程序名称前加上保留字application-,以防止解析正确的属性源问题。

你可以通过设置spring.cloud.config.*来覆盖所有这些(其中*nameprofilelabel),该label可用于回滚到以前版本的配置,使用默认的Config Server实现,它可以是git标签,分支名称或提交ID。标签也可以以逗号分隔列表的形式提供,在这种情况下,列表中的项目将逐个尝试,直到成功为止,在处理特性分支时,此行为非常有用。例如,你可能希望将配置标签与你的分支对齐,但使其成为可选(在这种情况下,请使用spring.cloud.config.label=myfeature,develop)。

为Config Server指定多个URL

当你部署了多个Config Server实例并预期一个或多个实例不时不可用时,为确保高可用性,你可以指定多个URL(作为spring.cloud.config.uri属性下的逗号分隔列表),也可以让所有实例在Eureka等Service Registry中注册(如果使用发现优先Bootstrap模式)。请注意,只有在Config Server未运行时(即应用程序已退出时)或发生连接超时时,才能确保高可用性,例如,如果Config Server返回500(内部服务器错误)响应或Config Client从Config Server收到401(由于凭据错误或其他原因),则Config Client不会尝试从其他URL获取属性,这种错误表示用户问题而不是可用性问题。

如果在Config Server上使用HTTP基本安全性,则仅当你在spring.cloud.config.uri属性下指定的每个URL中嵌入凭据时,才能支持每个Config Server身份验证凭据,如果使用任何其他类型的安全机制,则无法(目前)支持每个Config Server身份验证和授权。

配置读取超时

如果要配置读取超时,可以使用属性spring.cloud.config.request-read-timeout来完成此操作。

安全性

如果你在服务器上使用HTTP Basic安全性,客户端需要知道密码(如果不是默认值,则需要用户名),你可以通过配置服务器URI或多带带的用户名和密码属性指定用户名和密码,如以下示例所示:

bootstrap.yml

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

以下示例显示了传递相同信息的另一种方法:

bootstrap.yml

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

spring.cloud.config.passwordspring.cloud.config.username值覆盖URI中提供的任何内容。

如果你在Cloud Foundry上部署应用程序,提供密码的最佳方式是通过服务凭据(例如在URI中,因为它不需要在配置文件中),以下示例在本地运行,并在名为configserver的Cloud Foundry上为用户提供服务:

bootstrap.yml

spring:
  cloud:
    config:
     uri: ${vcap.services.configserver.credentials.uri:http://user:password@localhost:8888}

如果你使用其他形式的安全性,则可能需要向ConfigServicePropertySourceLocator提供一个RestTemplate(例如,通过在引导程序上下文中获取它并注入它)。

健康指示器

Config Client提供尝试从Config Server加载配置的Spring Boot Health Indicator,可以通过设置health.config.enabled=false来禁用健康指示器,出于性能原因,还会缓存响应,生存的默认缓存时间为5分钟,要更改该值,请设置health.config.time-to-live属性(以毫秒为单位)。

提供自定义RestTemplate

在某些情况下,你可能需要自定义从客户端向配置服务器发出的请求,通常,这样做涉及传递特殊的Authorization headers来验证对服务器的请求,要提供自定义RestTemplate

使用PropertySourceLocator的实现创建一个新的配置bean,如以下示例所示:

CustomConfigServiceBootstrapConfiguration.java

@Configuration
public class CustomConfigServiceBootstrapConfiguration {
    @Bean
    public ConfigServicePropertySourceLocator configServicePropertySourceLocator() {
        ConfigClientProperties clientProperties = configClientProperties();
       ConfigServicePropertySourceLocator configServicePropertySourceLocator =  new ConfigServicePropertySourceLocator(clientProperties);
        configServicePropertySourceLocator.setRestTemplate(customRestTemplate(clientProperties));
        return configServicePropertySourceLocator;
    }
}

resources/META-INF中,创建一个名为spring.factories的文件并指定自定义配置,如以下示例所示:

spring.factories

org.springframework.cloud.bootstrap.BootstrapConfiguration = com.my.config.client.CustomConfigServiceBootstrapConfiguration
Vault

使用Vault作为配置服务器的后端时,客户端需要为服务器提供令牌以从Vault检索值,可以通过在bootstrap.yml中设置spring.cloud.config.token在客户端内提供此令牌,如以下示例所示:

bootstrap.yml

spring:
  cloud:
    config:
      token: YourVaultToken
Vault中的嵌套密钥

Vault支持将密钥嵌套在Vault中存储的值中,如以下示例所示:

echo -n "{"appA": {"secret": "appAsecret"}, "bar": "baz"}" | vault write secret/myapp -

此命令将JSON对象写入Vault,要在Spring中访问这些值,可以使用传统的点(.)注解,如以下示例所示:

@Value("${appA.secret}")
String name = "World";

上面的代码会将name变量的值设置为appAsecret

上一篇:推送通知和Spring Cloud Bus 下一篇:服务发现:Eureka客户端

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74107.html

相关文章

  • Spring Cloud 参考文档Spring Cloud Config快速入门)

    摘要:快速入门这个快速入门使用的服务器和客户端。属性在端点中显示为高优先级属性源,如以下示例所示。名为的属性源包含值为且具有最高优先级的属性。属性源名称中的是存储库,而不是配置服务器。 Spring Cloud Config快速入门 这个快速入门使用Spring Cloud Config Server的服务器和客户端。 首先,启动服务器,如下所示: $ cd spring-cloud-con...

    gekylin 评论0 收藏0
  • Spring Cloud实战(一)-Spring Cloud Config Server

    摘要:概要什么是创建并运行一个建立一个创建并运行一个是什么什么是配置信息一个中不只是代码还需要连接资源和其它应用经常有很多需要外部设置的项去调整行为如切换不同的数据库国际化等应用中的会经常见到的等就是配置信息常见的实现信息配置的方法硬编码缺点需要 概要 什么是Spring Cloud Config? 创建并运行一个Spring Cloud Config Server 建立一个Reposit...

    Dionysus_go 评论0 收藏0
  • Spring Cloud 参考文档(推送通知和Spring Cloud Bus)

    摘要:推送通知和许多源代码存储库提供程序例如或通过通知你存储库中的更改,你可以通过提供程序的用户界面将配置为以及你感兴趣的一组事件。要覆盖该行为时使用的策略是,它接受请求和作为参数,并返回已更改的文件路径列表。 推送通知和Spring Cloud Bus 许多源代码存储库提供程序(例如Github、Gitlab、Gitea、Gitee、Gogs或Bitbucket)通过webhook通知你存...

    Mr_houzi 评论0 收藏0
  • Spring Cloud Alibaba基础教程:Nacos配置的多环境管理

    摘要:第二步在应用的配置文件中,增加环境配置第三步启动应用,我们可以看到日志中打印了,加载的配置文件使用实现在中是用来对做集合管理的重要概念。深入思考上面我们分别利用配置管理功能中的几个不同纬度来实现多环境的配置管理。 前情回顾: 《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》 《Spring Cloud Alibaba基础教程:支持的几种服务消费方...

    CNZPH 评论0 收藏0
  • SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    摘要:下一篇介绍基于的服务注册与调用。服务提供者工程配置这里服务提供者是使用之前进阶教程第三篇整合连接池以及监控改造而来,这里一样的部分就不再重复说明,下面将说明新增的部分。 Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<