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