- Spring Cloud Config介绍
- Config服务端配置中心搭建
- 配置文件存放本地
- 配置文件存放git上
- 客户端获取服务端配置示例
- 服务端使用本地存储的读取方式
- 服务端使用git存储的读取方式
- 动态刷新服务的配置(手动版)
用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持, 它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心, 它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施, 它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
Config服务端配置中心搭建新建配置中心模块
新建Module模块cloud-config-center-3344,它即为Cloud的配置中心模块CloudConfig Center
POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-kernelartifactId>
<groupId>com.kernel.springcloudgroupId>
<version>1.0.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>cloud-config-center-3344artifactId>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
dependencies>
project>
application.yml 初始配置
server:
port: 3344
spring:
application:
name: cloud-config-center # 注册进Eureka服务器的微服务名
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
启动类
@SpringBootApplication
@EnableConfigServer
public class CloudConfigApplication {
public static void main(String[] args) {
SpringApplication.run(CloudConfigApplication.class,args);
}
}
配置文件存放本地
application.yml 增加 spring cloud config 配置
server:
port: 3344
spring:
application:
name: cloud-config-center # 注册进Eureka服务器的微服务名
profiles:
active: native #配置文件在本地
# 配置中心
cloud:
config:
server:
native:
search-locations: classpath:/config/ #【重要参数】配置文件的存储位置路径
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
file-path-dev.yml
#logo图片存放地址
logoPath: /data/dev/upload/logo
file-path-prod.yml
#logo图片存放地址
logoPath: /data/prod/upload/logo
kernel-system-dev.yml
person:
userName: zhangsan-dev
birth: 1996/01/01
age: 18
kernel-system-prod.yml
person:
userName: zhangsan-prod
birth: 1996/01/01
age: 19
配置文件存放git上
- 需要事先在 github 或 gitee 等 git 工具上建立相应的的配置中心仓库。一个简单示例:https://gitee.com/shouanzh/spring-cloud-config
- 其实就是把本地文件的 config 包及包下配置放在 git 仓库里;
application.yml 增加config的git配置
server:
port: 3344
spring:
application:
name: cloud-config-center # 注册进Eureka服务器的微服务名
cloud:
config:
server:
#使用 git 作为配置文件存储
git:
uri: https://gitee.com/shouanzh/spring-cloud-config #配置文件所在仓库
username: git 账号
password: git 密码
default-label: master #配置文件分支
search-paths: config #配置文件所在根目录
force-pull: true #本地仓库如果有脏数据,则会强制拉取(默认是false)
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
Spring Cloud Config文件访问方式剖析
启动配置中心 和 Eureka注册中心
仓库中的配置文件会被转换成Web接口,访问请参照以下的规则
label:分支(branch)
profiles:环境(dev/test/prod)
application:服务名
1、/{application}-{profile}.yml
分支默认为yml配置的default-label 值
2、/
/{application}-{profile}.yml(推荐)
3、/{application}/{profile}[/
客户端获取服务端配置示例
引入 pom.xml 依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
因为每个服务都会将相关配置放在配置中心服务里,因此该依赖可以添加到公共模块里。
bootstrap.yml
applicaiton.yml是用户级的资源配置项
bootstrap.yml是系统级的,优先级更加高
application.yml文件改为bootstrap.yml,这是很关键的,因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml。
服务端使用本地存储的读取方式
spring:
application:
name: cloud-consumer-service
cloud:
config:
fail-fast: true #是否启动快速失败功能,功能开启则优先判断config server是否正常
name: kernel-system,file-path # 配置文件名 如果多个则逗号拼接 按优先级排序,如果key 相同 取 后者
profile: ${spring.profiles.active} # dev环境 综上 读取kernel-system-dev.yml file-path-dev.yml
discovery:
enabled: true
service-id: cloud-config-center # 配置中心服务名
profiles:
active
:
dev
测试
@RestController
@Api(tags = "配置中心测试")
public class GetCloudConfigContrller {
@Value("${person.age}")
private Integer age;
@Value("${person.userName}")
private String name;
@ApiOperation(value="getConfigInfo")
@PostMapping(value = "/getConfig/v1")
public RestResult<UserTest> getConfig() {
try {
UserTest userTest = new UserTest();
userTest.setName(name);
userTest.setAge(age);
return RestResult.success(userTest,ResultCode.SUCCESS);
} catch (Exception e) {
return RestResult.fail(ResultCode.DATA_ACCESS_ERROR);
}
}
}
服务端使用git存储的读取方式
spring:
application:
name: cloud-consumer-service
cloud:
#Config客户端配置
config:
label: master #分支名称
name: kernel-system #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上kernel-system-dev.yml的配置文件被读取http://localhost:3344/master/kernel-system-dev.yml
uri: http://localhost:3344
#配置中心地址
测试
动态刷新服务的配置(手动版)
Spring Boot Actuator 提供了一个 @RefreshScope 注解,允许开发团队访问 /refresh 端点,强制 Spring Boot 应用程序重新读取应用程序配置;
引入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
修改YML,添加暴露监控端口配置:
# 暴露监控端点
management:
endpoints:
web:
exposure:
include:
"*"
Controller 添加 @RefreshScope 注解
@RestController
@Api(tags = "消费端")
@RefreshScope // 配置文件自动刷新
public class GetCloudConfigContrller {
@Value("${person.age}")
private Integer age;
@Value("${person.userName}")
private String name;
@ApiOperation(value="getConfigInfo")
@PostMapping(value = "/getConfig/v1")
public RestResult<UserTest> getConfig() {
try {
UserTest userTest = new UserTest();
userTest.setName(name);
userTest.setAge(age);
return RestResult.success(userTest,ResultCode.SUCCESS);
} catch (Exception e) {
return RestResult.fail(ResultCode.DATA_ACCESS_ERROR);
}
}
}
测试
启动项目后 修改 git上 的配置文件内容
发送Post请求刷新客户端才会生效
curl -X POST
"http://localhost:80/actuator/refresh"
修改前
修改配置文件
修改后
并没有生效
执行post刷新
再次访问
评论列表(0条)