Client 使用开发步骤
1.Client端添加Config Client的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.将application.yml文件改为bootstrap.yml文件,文件内容为:
spring:
application:
#order名称应该是和config git上的文件名称一样
name: order
cloud:
config:
discovery:
enabled: true
#config 服务的名称
service-id: config
#dev 为统一配置中心文件的{profiles}
profile: dev
之所以要将application.yml文件改为bootstrap.yml文件是需要我们在启动的时候先根据里面内容去获取config的文件内容,然后再启动。而application.yml会直接根据文件内容启动,然后发现没连接数据库,导致启动失败。所以spring boot 提供了个bootstrap.yml 可以先载入 再启动。
3.创建个类 去获取config文件的内容 然后看获取的值是否正确(这一步可以跳过,因为很明显 已经启动了)
返回值:
注意点:
1.config的高可用:
启动多个config server
client不用修改 只需要根据名称去调用就是访问config ,跟服务调用是一样的,也用到了负载均衡。每次启动连接的config服务是不同的。
2.Eureka 的切换
1.停掉8761的Eureka,启动8762的Eureka
2.首先需要修改Config的配置文件 修改其中的Eureka地址为8762
3.然后需要把git的pom文件中的eureka配置删除 然后放入Order服务(Config client)bootstrap.yml中,也就是Eureka的配置是不能放入统一配置中心的。注意:Config读取git文件的顺序和Spring Boot 启动加载文件的顺序是一样的,也就是说,会加载application.yml文件的所有内容,如果application-dev.yml中和application.yml中的某些属性不同的那么加载application-dev.yml中的,也就是删application-dev.yml中的Eureka配置是没用的,因为application.yml还有。
为什么不直接修改git配置文件呢?
在Order服务(Config client)中,是需要根据Eureka去寻找Config这个实例的。在上面的例子中,之所以没配置Eureka也可以找到Config实例是因为Eureka的默认地址是8761,现在我们启动的Eureka是8762,在8762中找不到Config实例会报错。因为找不到Config实例客户端会默认访问统一配置中心的地址为:http://localhost:8888。所以需要把Config git 文件中的Eureka配置取出来,配置到各个Config客户端的配置文件中。这也是为什么当Eureka发生改变的时候,直接改Config git 文件中的Eureka地址是没用的原因。
原理
占位符配置URL
{application}、{profile}、{label}这些占位符除了用于标识配置文件的规则之外,还可以用于Config Server中对Git仓库地址的URL配置。比如,我们可以通过{application}占位符来实现一个应用对应一个Git仓库目录的配置效果实现。
其中{application}代表了应用名,所以当客户端向Config Server发起获取配置的请求时,Config Server会根据客户端的spring.application.name信息来填充{application}占位符以定位配置资源的存储位置,从而实现微服务应用的属性动态获取不同位置的配置。另外,这些占位符中,{label}参数比较特别,如果Git的分支和标签名包含“/”那么{label}的参数再HTTP的URL中应该使用"(_)"来替代,以避免改变了URL的含义,指向到其他的URL资源。