config--学习笔记(6)
目录
一、参考Spring Cloud官方文档
--1、Spring Cloud Config
--2、快速开始
--3、客户端使用
--4、Spring Cloud Config服务器
--5、环境库
--6、Spring Cloud Config客户端
----6.1、配置第一引导
----6.2、发现第一个引导
----6.3、查找远程配置资源
二、实操
--1、工程准备
--2、config服务器端的配置
--3、config客户端的配置
--4、github上的配置
--5、运行结果
一、参考Spring Cloud官方文档
1、Spring Cloud Config
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。
2、快速开始
定位资源的默认策略是克隆一个git仓库(在spring.cloud.config.server.git.uri),并使用它来初始化一个迷你SpringApplication。
HTTP服务具有以下格式的资源:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中“应用程序”作为SpringApplication中的spring.config.name注入(即常规的Spring Boot应用程序中通常是“应用程序”),“配置文件”是活动配置文件(或逗号分隔列表的属性),“label”是可选的git标签(默认为“master”)。
Spring Cloud Config服务器从git存储库(必须提供)为远程客户端提供配置:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
3、客户端使用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
程序运行的时候会抓取外部配置,默认从本地8888端口抓取本地配置。可以在bootstrap.properties文件中改变这种配置。bootstrap.properties是程序启动阶段的上下文,简单的说就是bootstrap.properties会先于application.properties文件在启动时被加载。
spring.cloud.config.uri: http://myconfigserver.com
4、Spring Cloud Config服务器
服务器为外部配置(名称值对或等效的YAML内容)提供了基于资源的HTTP。服务器可以使用@EnableConfigServer注释轻松嵌入到Spring Boot应用程序中。
ConfigServer.java
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
5、环境库
您要在哪里存储配置服务器的配置数据?管理此行为的策略是EnvironmentRepository,服务于Environment对象。此Environment是Spring Environment(包括propertySources作为主要功能)的域的浅层副本。Environment资源由三个变量参数化:
{application}映射到客户端的“spring.application.name”;
{profile}映射到客户端上的“spring.profiles.active”(逗号分隔列表); 和
{label}这是一个服务器端功能,标记“版本”的配置文件集
Spring Boot加载配置的时候,"spring.cloud.name"等效于{application},"spring.profiles.active"等效于{profile}
示例:客户端应用程序具有此引导配置:
bootstrap.yml
spring:
application:
name: foo
profiles:
active: dev,mysql
(通常使用Spring Boot应用程序,这些属性也可以设置为环境变量或命令行参数)。
仓库中,可以把配置文件存到子目录下,并且通过模式匹配来检索
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
searchPaths: foo,bar*
在此示例中,服务器搜索顶级和“foo /”子目录以及名称以“bar”开头的任何子目录中的配置文件。
另外,在Git的URL路径中可以使用占位符,在搜索路径中也可以使用占位符。
6、Spring Cloud Config客户端
Spring Boot应用程序可以立即利用Spring配置服务器(或应用程序开发人员提供的其他外部属性源),并且还将获取与Environment更改事件相关的一些其他有用功能。
6.1、配置第一引导
这是在类路径上具有Spring Cloud Config Client的任何应用程序的默认行为。配置客户端启动时,它将通过配置服务器(通过引导配置属性spring.cloud.config.uri)绑定,并使用远程属性源初始化Spring Environment。
这样做的最终结果是所有想要使用Config Server的客户端应用程序需要bootstrap.yml(或环境变量),服务器地址位于spring.cloud.config.uri(默认为“http:// localhost:8888” )。
6.2、发现第一个引导
如果您正在使用DiscoveryClient实现,例如Spring Cloud Netflix和Eureka服务发现或Spring Cloud Consul(Spring Cloud Zookeeper不支持此功能),那么您可以使用Config Server如果您想要发现服务注册,但在默认的“配置优先”模式下,客户端将无法利用注册。
如果您希望使用DiscoveryClient找到配置服务器,可以通过设置spring.cloud.config.discovery.enabled=true(默认为“false”)来实现。最终的结果是,客户端应用程序都需要具有适当发现配置的bootstrap.yml(或环境变量)。例如,使用Spring Cloud Netflix,您需要定义Eureka服务器地址,例如eureka.client.serviceUrl.defaultZone。使用此选项的价格是启动时额外的网络往返,以定位服务注册。好处是配置服务器可以更改其坐标,只要发现服务是一个固定点。默认的服务标识是“configserver”,但您可以使用spring.cloud.config.discovery.serviceId在客户端进行更改(在服务器上以服务的通常方式更改,例如设置spring.application.name)。
6.3、查找远程配置资源
配置服务从/{name}/{profile}/{label}提供属性源,客户端应用程序中的默认绑定
“name”= ${spring.application.name}
“profile”= ${spring.profiles.active}(实际上是Environment.getActiveProfiles())
“label”=“master”
所有这些都可以通过设置spring.cloud.config.* (其中*是“name”,“profile”或“label”)来覆盖。“标签”可用于回滚到以前版本的配置; 使用默认的Config Server实现,它可以是git标签,分支名称或提交ID。标签也可以以逗号分隔的列表形式提供,在这种情况下,列表中的项目会逐个尝试,直到成功。例如,当您可能希望将配置标签与您的分支对齐,但使其成为可选(例如spring.cloud.config.label=myfeature,develop)时,这对于在特征分支上工作时可能很有用。
二、实操
1、工程准备
此处需要三个工程eureka-server-demo、config-server-demo、config-client-demo
eureka-server-demo
这个工程参考参考Eureka--学习笔记(1)
config-server-demo
服务器端 本文后面会讲到配置
config-client-demo
客户端 本文后面会讲到配置
2、config服务器端的配置
pom.xml
<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>
application.yml
spring:
cloud:
config:
server:
git:
uri: https://github.com/guozimao/config
application:
name: config-server-demo
server:
port: 8100
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigServerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerDemoApplication.class, args);
}
}
3、config客户端的配置
pom.xml
<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>
bootstrap.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
cloud:
config:
discovery:
enable: true
serviceId: config-server-demo
failFast: false
uri: http://localhost:8100
lable: master
application:
name: config-client-demo
profiles:
active: dev
application.yml
server:
port: 8094
被调用类
@RequestMapping("/")
@RestController
public class HelloController {
@Value("${foo}")
private String name;
@GetMapping("/home")
private String home(){
return "Hello! " + name;
}
}
4、github上的配置
https://github.com/guozimao/config
config-client-demo-dev.yml
5、运行结果
UI界面的监控
在浏览器中,输入http://localhost:8094/home