Spring Cloud Consul配置中心

  • Post author:
  • Post category:其他



目录


1、在Consul UI的界面中找到Key/Value菜单


2、在启动类中添加注解@EnableDiscoveryClient和@EnableConfigurationProperties({RedisConfig.class})


3、添加一个Controller类


4、用@ConfigurationProperties注解直接将配置注入Bean中


5、配置信息


6、启动服务


1)、在浏览器中访问http://localhost:8506/kevinConfig


2)、在浏览器中访问http://localhost:8506/redisConfig


3)、更改配置服务器的值


上一篇中搭建了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


,在配置中执行修改配置值后,访问:



版权声明:本文为it_lihongmin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。