官网地址:https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-config
Consul 提供了一个键/值存储用于保存配置和其他元数据。Spring Cloud Consul Config 是 Spring Cloud Config Server和Client的一个替代方案。配置信息在特殊的“bootstrap”阶段被加载到 Spring Environment 中。配置默认存储在 /config 文件夹下。基于应用程序的名称(application’s name)和激活的配置文件( active profiles),会创建多个 PropertySource 实例,这模仿了 Spring Cloud Config 解析属性的顺序。例如,一个名为 “testApp” 并且使用 “dev” 环境的应用程序,将会有如下属性源被创建:
- consul:/config/testApp-dev.properties
- consul:/config/testApp.properties
- consul:/config/application-dev.properties
- consul:/config/application.properties
config/testApp,dev/
config/testApp/
config/application,dev/
config/application/
这意味着,对于这个名为 “testApp” 并且处在 “dev” 环境下的应用,Spring Cloud Consul Config 会按照上述顺序查找并加载配置信息,优先级从高到低,即先检查更具体的配置(包含应用名和环境的),再到更通用的配置。这样的设计允许灵活地根据不同环境和应用需求来组织和覆盖配置设置。
① pom引入依赖
<!--SpringCloud consul config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
② bootstrap.yml配置
需要在application.yml 同级创建bootstrap.yml文件
spring:
application:
name: cloud-payment-service
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
config:
profile-separator: '-' # default value is ",",we update '-'
format: YAML
# config/cloud-payment-service/data
# /cloud-payment-service-dev/data
# /cloud-payment-service-prod/data
③ Consul控制台创建文件
在如下界面点击create,创建config文件夹,以 /
结尾表示是文件夹
同理创建cloud-payment-service-dev文件夹
文件夹创建完毕如下所示:
cloud-payment-service-dev下我们创建配置信息:这里data没有/哦
④ 代码测试
主启动类如下:
@SpringBootApplication
@EnableDiscoveryClient
public class Main8001
{
public static void main(String[] args)
{
SpringApplication.run(Main8001.class,args);
}
}
controller如下:
@Value("${server.port}")
private String port;
@GetMapping(value = "/pay/get/info")
public String getInfoByConsul(@Value("${info}") String atguiguInfo)
{
return "Info: "+atguiguInfo+"\t"+"port: "+port;
}
浏览器访问 http://localhost:8001/pay/get/info 就可以看到刚刚配置信息
⑤ 动态刷新
此时我们修改data的配置信息,浏览器再次请求返回的内容是不变的。我们可以通过在主启动类添加注解来实现动态刷新:
@RefreshScope // 动态刷新
此时主启动类如下所示:
@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope // 动态刷新
public class Main8001
{
public static void main(String[] args)
{
SpringApplication.run(Main8001.class,args);
}
}
默认需要等待55秒,这里我们可以修改其刷新时间:
spring:
application:
name: cloud-payment-service
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
config:
profile-separator: '-' # default value is ",",we update '-'
format: YAML
watch:
wait-time: 1 # 生产环境不建议修改