配置中心
以下概念性的语言均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
Github源码参考:https://github.com/HanJuly/SpringCloudDemo
为什么需要配置中心
以下列子引用大佬:配置中心
-
由于业务的变动,用户在以前进行注册的时候默认的用户名是“小强”,但是新的领导来了,需要把这个改成“小明”。因为,业务的流量还是比较大的,所以,没有办法在白天流量高峰期修改配置文件,进行重启!
-
此时,就辛苦开发的小哥了,他们需要等到半夜里凌晨三四点的时候,没有流量的时候,小心翼翼的去修改application.properties配置文件,必将系统进行重启。
-
另外,公司采用的是集群,进行了负载均衡,系统部署在了多台服务器上,那么开发小哥需要一台台的进行修改,小心翼翼的进行修改,生怕出了一点意外!
-
开发小哥是在忍受不了这种变更了,修改一个配置就需要如此周折的去完成这件事情!忍无可忍,于是像交流群里的一位大神请教,大神指点让他去搜索一下“分布式配置中心”。
springBoot的配置文件加载优先级
0.从配置中心加载的配置
1.命令行中传入参数
2.bootstrap.propertis
2.位于当前jar包之外的,针对不同{profile}环境的配置文件内容,列如:application-{profile}
3..位于当前jar包之内的,针对不同{profile}环境的配置文件内容,列如:application-{profile}
4.jar包外的application.properties
5.jar包内的application.properties
6.@PropertySource注解定义的属性
7.SpringApplication.setDeafaultProperties定义内容
所以在使用配置中心后,其他的配置都不会生效了。下面我们使用bootstrap.yaml配置github的地址,然后在github保存application.yaml配置
配置中心搭建
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
yaml
在Config端配置仓库地址,并服务化config,让其他服务通过服务名进行调用
# 公共配置
spring:
application:
name: config-server
cloud:
config:
server:
native:
git:
uri: https://github.com/HanJuly/config-repo
search-paths: '{application}'
username: xxxx
password: xxxxxx
这的search-paths目录是使用配置中心的客户端的应用名,所以请在github上创建对
应的文件夹如下:
image.png image.png
服务化配置中心
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8500/eureka/
在启动类上加上注解
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
到此配置中心就搭建完成,
客服端搭建
yaml
首先把以前的application.yaml的配置放到对应的github目录下。
image.png
在客户端项目resource上删除原来的application.yaml文件改为bootstrap.yaml如下
image.png
yaml中这么配置
# eureka 主机/端口配置 start
spring:
application:
name: hello-consumer #与github地址相同
profiles:
active: dev
cloud:
config:
profile: ${spring.profiles.active}
label: master #github的分支
discovery:
enabled: true
service-id: config-server # 配置中心的服务名
username: HanJuly
password: github@9569155
fail-fast: true #快速失败
pom.xml中配置
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
验证
先启动注册中心,然后启动配置中心,最后启动客户端。
配置中的日志
image.png
当你看到这个时,配置文件被拉到本地,你可以到这个路径下查看。yaml的加载是在配置中心加载完了,然后再发送对应的客户端服务。如果yaml有错,那么就会在配置中心报错。
客户端的日志
image.png