一 springcloud-config的作用
1.1 springcloud作用
springcloud-config 在微服务中,为各个不同的微服务提供一个公共集中化的外部管理配置。
简称:分布式的配置中心
优点:
1.集中管理配置;
2.动态化更新配置;
3.配置发生变化时,服务不需要重新启动就能够感知新的变化,并使用新的变化配置
4.使用RESTF形式接口进行暴露
1.2 配置文件加载顺序
bootstrap.yml为系统级,application.yml为用户级别,系统级优先加载,正确的加载顺序为:
正确的属性加载顺序为bootstrap.yml->application.yml->spring.application.name-profile.yml
其中如果多个yml文件出现同一属性,后加载的会覆盖先加载的。
二 springcloud-config的配置操作
2.1 架构图
35访问34服务,因为34和git码云是一个整体,也就是35 直接能访问git码云配置文件的内容。
2.2 搭建git仓库
1.在码云仓库中,新建一个仓库工程,里面设置两个配置文件
2.两个配置文件,分别写一些东西
2.3 搭建本地配置中心服务34
1.工程结构
2.pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.配置文件
具体代码
server:
port: 34
spring:
application:
name: cloud-config-center34 #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://gitee.com/jurf-liu/ailibaba-springcloud-center-config.git #GitHub上面的git仓库名字
####搜索目录
search-paths:
- ailibaba-springcloud-center-config
username: jurf-liu
password: 123456liu
####读取分支
label: master
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8003/eureka
4.启动类
@SpringBootApplication
@EnableConfigServer
public class App
{
public static void main( String[] args )
{
SpringApplication.run( App.class, args);
System.out.println("启动成功....");
}
}
2.4 搭建本地客户端35
1.工程结构
2.pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.配置文件
代码
server:
port: 35
spring:
application:
name: ms-config-client35
cloud:
#Config客户端配置
config:
label: master #分支名称
name: application #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://localhost:34/master/application-dev.yml
uri: http://localhost:34 #配置中心地址k
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8003/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
4.业务类
@RestController
@RefreshScope
public class ConfigController {
@Value("${spring.application.name}")
private String aname;
@Value("${server.port}")
private String port;
@Value("${mysql.info}")
private String info;
@GetMapping("/configInfo")
public String getConfigInfo()
{
return aname+"||"+port+" "+info;
}
}
5.启动类
@EnableEurekaClient
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
System.out.println("35启动成功....");
}
}
2.5 eureka注册中心
具体搭建,略
2.6 测试
2.6.1 测试访问
1.先启动eureka,然后启动34服务实例,最后启动35服务实例。
这里服务启动之后,显示的是git仓库中配置的端口8001,而不是本地bootstrap配置的端口35
使用git仓库中的配置文件中的端口8001才能访问:
使用客户端的35端口进行访问,无法访问到
服务在启动的时候,就加载到git仓库中配置文件的端口了,如下图所示
可见通过34服务,读取到git仓库中配置文件的内容
2.6.2 手动动态刷新配置文件
1.修改git配置文件内容
2.再次访问,没有访问到最新内容
3.需要手动刷新一下,通过curl命令,动态刷新一下
curl -X POST "http://localhost:8001/actuator/refresh"
4.再次访问