[Spring Cloud] 3.3 Spring Cloud Config 配置 (第三部分)

本文介绍了Spring Cloud Config Server如何管理和分发配置文件,包括使用JSON、YAML和属性文件等不同格式,以及纯文本配置方式。此外还探讨了内嵌Config Server的方法、推送通知和Spring Cloud Bus的集成。

3.3 Serving Alternative Formats 使用其他格式的配置文件

默认的JSON格式就可以很好的适用于Spring应用,因为这个格式可以直接映射于Environment环境抽象层中。如果你更喜欢的话,也可以使用YAML格式以及Java属性配置文件格式。这种方式对于一些外部扩展的元数据配置,或者为了兼容一些非Spring应用时,显得格外有用。

对于使用YAML以及属性文件时,会有一个额外的resolvePlaceholders标识(一个Boolean值),用于显式的指出是否使用占位符。这对于那些不想使用Spring占位符的客户端环境就比较有用了。

注意: 在使用YAML以及属性文件时会有一些限制,主要是体现在丢失元数据上。JSON格式从结构上来说是一个有序的属性源,例如:可以给每个属性源命名。YAML以及属性文件方式只是一个简单的键值对,即便可以有多个属性源,但是原始数据源的名字就被丢失掉了。对于同一层级的多个属性源或者必须使用多键值时,YAML就不能精确的表达这样的结构。

3.4 Serving Plain Text 使用纯文本

有的时候根据不同环境,可以考虑不使用Environment抽象层(即:不使用JSON,YAML,Properties),而直接使用纯文本方式进行配置。 Config Server提供几个额外的访问端点:/{name}/{profile}/{label}/{path}起到和正常Environment端点一样的作用,不过这里的{path}是指的一个文件名。这里的源文件的定位与正常YAML或者属性文件的扫描处理逻辑类似,不同点在于只会搜索到第一个匹配到的文件,而不会想YAML及属性文件那样扫描加载所有匹配文件。

当资源文件被找到后,与常规的配置文件一样,也会先处理占位符。这种配置方法会与环境端点紧密的关联。例如,如果在git(svn)上你有下面这些文件:

application.yml
nginx.conf

其中nginx.conf配置如下:

server {
    listen              80;
    server_name         ${nginx.server.name};
}

application.yml配置如下:

nginx:
  server:
    name: example.com
---
spring:
  profiles: development
nginx:
  server:
    name: develop.com

接着有一个/foo/default/master/nginx.conf文件:

server {
    listen              80;
    server_name         example.com;
}

同时还有一个/foo/development/master/nginx.conf文件:

server {
    listen              80;
    server_name         develop.com;
}

注意: 这里也可以使用特定配置文件。例如:logback-development.xml,这样就会搜索/*/development/*/logback.xml

3.5 Embedding the Config Server 内嵌的Config Server

Config Server最好是以一个应用的形式单独运行。当然,在需要的时候可以将其以内嵌到其他应用的方式来运行。 这也比较简单,仅需要使用@EnableConfigServer注解就行。 这种情况下,有一个额外的可选配置:spring.cloud.config.server.bootstrap来控制服务自身是否也使用远程资源来进行配置。默认情况下这个配置项是关闭的,因为,开启的话会导致启动变慢。当内嵌服务需要有一些像其他应用初始化类似的操作时,可以开启此配置。

注意: 显而易见的,如果开启此配置,那需要在bootstrap.yml中配置服务名,以及资源URI。

可以通过spring.cloud.config.server.prefix配置,可以改变服务访问端点。例如:可以配置实用/config为资源前缀。注意这个配置应该以“/”开头,但是不能以“/”结尾。 这个将会作用于Config Server的@RequestMappings配置。

如果不想通过外部端点访问Config Server,而是直接读取后台配置信息。可以通过不使用@EnableConfigServer来彻底关闭外部入口,同时打开spring.cloud.config.server.bootstrap=true配置。

3.6 Push Notifications and Spring Cloud Bus 通知推送和Spring Cloud总线

很多的源代码库(github,gitlab,Bitbucket )在资源发生修改时都会提供一个Web回调方式去通知你。 你可以配置一个URL的去接收回调回来的事件,然后实现处理逻辑。比如,GitHub会以POST方式回调一个包含一组提交的JSON结构报文,而且会在HTTP的头部设置X-Github-Event: push。 Config Server 也提供了一个类似的功能。可以添加spring-cloud-config-monitor依赖库,这样就可以在Config Server中激活Spring Cloud 总线,接着就会开启一个访问端点/monitor

Config Server在资源发生修改后,将会向配置的回调URL发送一个RefreshRemoteApplicationEvent事件。

这样当发生修改时,就可以被监测到。当然,在默认情况下,修改事件只会投递到对应的应用中。可以自己去实现一个PropertyPathNotificationExtractor用来完成事件的处理逻辑,这里能接收HTTP的头,以及包含一组修改过的资源清单。

默认的配置能够很好的在GitHub,GitLab以及Bitbucket下工作。这些代码库的JSON通知报文可以转化为Form方式提交到/monitor。这将会在匹配{name}的应用中进行一个事件广播。

注意: RefreshRemoteApplicationEvent仅在spring-cloud-bus被激活的情况下才会被触发。

注意: 默认情况下,本地资源库的改变(非配置文件)会导致文件系统的改变,此时回调通知不会触发,但是当你编辑一个配置文件时就会触发回调。

转载于:https://my.oschina.net/roccn/blog/710071

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值