目录
2、在启动类中添加注解@EnableDiscoveryClient和@EnableConfigurationProperties({RedisConfig.class})
4、用@ConfigurationProperties注解直接将配置注入Bean中
1)、在浏览器中访问http://localhost:8506/kevinConfig
2)、在浏览器中访问http://localhost:8506/redisConfig
上一篇中搭建了Consul的服务器集群,并且将服务注册到集群中进行了服务的调用。Consul除了注册中心的功能就是基于key和value的配置中心,可以替代Spring Cloud Config。
Spring Cloud Consul 配置的基本概念:
1、与Spring Cloud Config一样,Consul配置也提供了基于Spring Profiles的配置隔离:
spring.profiles.active = dev
2、Consul配置服务器端key允许的value类型值有:
YAML、PROPERTIES、KEY-VALUE、FILES
# 存储在Consul服务端的配置格式:YAML PROPERTIES KEY-VALUE FILES spring.cloud.consul.config.format = YAML
3、数据配置的key,默认为data
# 配置数据key,默认为data spring.cloud.consul.config.data-key=data
4、数据存储的前缀,默认为config
# 数据配置的前缀,默认为config spring.cloud.consul.config.prefix=config
5、配置是按照项目进行存储
下面就开始Consul配置服务器demo,项目地址为:
https://github.com/kevin-lihongmin/spring-cloud-project-kevin/tree/master/consul-demo/consul-config
1、在Consul UI的界面中找到Key/Value菜单
在菜单中按照下面的方式进行配置,如下:
紧接着上一篇,Consul的集群中心,已经在项目中创建
consul-config子
项目。
2、在启动类中添加注解
@EnableDiscoveryClient
和
@EnableConfigurationProperties({RedisConfig.class})
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@EnableConfigurationProperties({RedisConfig.class})
@SpringBootApplication
public class ConsulConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulConfigApplication.class, args);
}
}
3、添加一个Controller类
在Spring Cloud Config项目(
Spring Cloud Config三种配置服务
)中,我们已经知道了在配置服务器端更改了配置,客户端是不会立即生效的,除非添加
@RefreshScope
注解,或者具体参考之前的几种生效方式(
当github远程仓库属性进行更改时,不能获取到更新的值
)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class ConsulConfigController {
@Value("${kevin}")
private String kevinConfig;
@Autowired
private RedisConfig redisConfig;
@GetMapping("kevinConfig")
public String getConfigValue() {
return "consul 配置中kevin的值为:" + kevinConfig;
}
@GetMapping("redisConfig")
public String getRedisConfig() {
return "consul 配置中redis的值为:" + redisConfig.toString();
}
}
4、用
@ConfigurationProperties
注解直接将配置注入Bean中
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* redis配置
*/
@ConfigurationProperties(prefix = "redis")
public class RedisConfig {
/** redis ip地址 */
private String ip;
/** redis port */
private String port;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
@Override
public String toString() {
return "RedisConfig{" + "ip='" + ip + ", port='" + port + '}';
}
}
5、配置信息
application.properties
# 服务端口 server.port=8506 # 服务名称 spring.application.name=consul-config
bootstrap.properties
# 注册集群的节点地址(ip和端口) spring.cloud.consul.host=192.168.0.103 spring.cloud.consul.port=8500 # 是否开启Consul服务 spring.cloud.consul.enabled=true # 是否开启Consul配置服务 spring.cloud.consul.config.enabled=true # 存储在Consul服务端的配置格式:YAML PROPERTIES KEY-VALUE FILES spring.cloud.consul.config.format = YAML # 配置数据key,默认为data spring.cloud.consul.config.data-key=data # 数据配置的前缀,默认为config spring.cloud.consul.config.prefix=config # 激活的Spring Profiles,多个使用逗号进行间隔 spring.profiles.active = dev # 配置中应用名称与Spring Profiles的间隔符 spring.cloud.consul.config.profile-separator=.
6、启动服务
1)、在浏览器中访问
http://localhost:8506/kevinConfig
2)、在浏览器中访问
http://localhost:8506/redisConfig
3)、更改配置服务器的值
由于在Controller中添加了
@RefreshScope
,在配置中执行修改配置值后,访问: