config是Spring Cloud中的配置中心,在正式场景中,存在修改配置的情况,每次配置的修改都要进行重新打包,这是非常麻烦的一件事,可能还伴随着其他问题的引发。而config就可以将一些与启动无关的配置进行动态修改,并生效。以前要数据库进行配置的,现在也可以在config中完成。
config有什么用?为什么要存在?
config如何使用?
config一些注意点
Config服务端
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies>
bootstrap.yml
# Spring properties spring: application: name: config-service # Service registers under this name cloud: config: server: git: uri: https://github.com/zoeminghong/spring-cloud-demo.git search-paths: config-repo #文件搜索路径 username: username #账号 password: password #密码 name: appzone #application name label: master #分支 # profiles: # active: native #当不使用git时,可以设置为native,获取config服务下main/java/resources本地配置 # Map the error path to error template (for Thymeleaf) error: path=/error # Discovery Server Access eureka: instance: hostname: localhost client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://root:123456@${eureka.instance.hostname}:8761/eureka/ # 注册到eureka服务,账号:密码@地址 # HTTP Server server: port: 7001 # HTTP (Tomcat) port
Main.java
@EnableConfigServer @SpringBootApplication @EnableDiscoveryClient public class ConfigApplication{ public static void main(String[] args){ new SpringApplicationBuilder(ConfigApplication.class).web(true).run(args); } }
Config客户端
pom配置是与服务端是一样的
spring: cloud: # config的相关配置 config: label: master profile: dev uri: http://localhost:7001/ #config Service address name: appzone #application name discovery: enabled: true #whether enable service-id service-id: CONFIG-SERVICE #config service application name on the eureka username: root # regisit centre's username password: 123456 # regisit centre's password # fail-fast: true # 没有连接配置服务端时直接启动失败 # Spring properties application: name: order-service # Service registers under this name freemarker: enabled: false # Ignore Eureka dashboard FreeMarker templates thymeleaf: cache: false # Discovery Server Access eureka: instance: hostname: localhost client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://root:123456@${eureka.instance.hostname}:8761/eureka/ # HTTP Server server: port: 2222 # HTTP (Tomcat) port
main.java
@SpringBootApplication @EnableDiscoveryClient public class OrderApplication{ public static void main(String[] args){ new SpringApplicationBuilder(OrderApplication.class).web(true).run(args); } }
其他说明
config端更新配置后,如何更新
以下是客户端刷新(都是POST)
application.properties
中配置endpoints.restart.enabled=true启动指定的端口
弊端: 通过restart耗时比较长,因此就有了 RefreshScope
模式的匹配
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo repos: simple: https://github.com/simple/config-repo special: pattern: special*/dev*,*special*/dev* uri: https://github.com/special/config-repo local: pattern: local* uri: file:/home/configsvc/config-repo
当不存在pattern时,{application}/{profile}则根据key来决定,例如simple中,匹配的是simple/ ,如local中,匹配的是local/ /*
本地存储路径控制
在使用的config服务的时候,其会clone一份缓存到本地,如果你要指定路径可以使用 spring.cloud.config.server.git.basedir
使用本地加载配置文件
需要配置: spring.cloud.config.server.native.searchLocations
跟 spring.profiles.active=native
。
路径配置格式: classpath:/, classpath:/config,file:./, file:./config
。
基于文件的资源库
在基于文件的资源库中(i.e. git, svn and native),这样的文件名 application*
命名的资源在所有的客户端都是共享的(如 application.properties, application.yml, application-*.properties,etc.)。
加密与解密
如果远程属性包含加密内容(以{cipher}开头),这些值将在通过HTTP传递到客户端之前被解密。
如果config的客户端需要使用service-id这种负载均衡的方式获取config服务端的配置信息,需要注意将 注册中心的信息和config服务的信息 都写于bootstrap.yml下,
否则可能存在找不到config服务。
config中文文档