springcloud使用consul自定义配置k-v,无配置中心服务

consul工具不仅可以用来进行注册服务的管理,同时也是key/value管理工具使用,控制台提供的界面可以很方便的管理各服务的配置,该办法可能无法区分dev或者prod不同的环境文件,都是即时刷新的。
– 遇到的坑
在开发的过程中以为和config-server一样需要服务端客户端模式,后来发现只要在服务中添加consul-config就行,后续将没有config-server的概念。
注意添加了consul-config的客户端服务需要去除config-client,否则会报错configServerRetryInterceptor找不到
QQ截图20210108114116.png
— 以下来源网络的文章
1.先添加依赖
之前config server的依赖去掉,换成consul-config的依赖即可。

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

2.修改bootstrap.yml文件(切记,一定是在bootstrap.yml配置),并把原有的config相关配置注释掉

 spring:
   cloud:
     consul:
       host: 127.0.0.1
       port: 8500
       discovery:
         healthCheckPath: /info.json
         healthCheckInterval: 5s
         instanceId: ${spring.application.name}:${spring.cloud.client.ipAddress}
         enabled: true
       config: # 以下配置对应 config/application/data
         enabled: true
         format: YAML # YAML 表示consul中的key-value中的value内容,采用YAML格式
         prefix: config # config 表示consul用于存储配置的文件夹根目录名为config
         defaultContext: application #application 表示配置文件对应的应用名称(eg: 你的服务如果打算取名为myApp,则这里的application就要换成myApp,默认会适用spring.application.name 的值,可以忽略该字段)
         profileSeparator: ',' #',' 表示如果有多个profile(eg: 开发环境dev,测试环境test...) ,则key名中的profile与defaultContext之间,用什么分隔符来表示
         data-key: data # data 表示最后一层节点的key值名称,一般默认为data

consul中创建kv配置节点

很多文章,包括官方文档这一步都讲得不明不白,关键是 节点名称的命名规则,要与bootstrap.yml中的配置一样,比如我们要创建一个test环境的配置,key名可以取为:

config/application,test/data

这里每一个部分,都要与上一步bootstrap.yml中的一致。

然后Value值的部分,把配置内容按yml格式填进去就行:

3.使用相关配置,注意,需要变更配置的类上,要加@RefreshScope注解,否则不会刷新配置。

@RestController
@RefreshScope
@RequestMapping("test")
public class DictController {

    @Value("${foo.bar}")
    private String foobar;

    @GetMapping(value = "showfoo", produces = "application/json")
    public String showfoo() {
        return foobar;
    }
}

tips: 平时开发时,一般使用consul dev模式,开发模式下kv存储不会持久化存储,全在内存中(重启consul就丢了!),所以一般建议yml配置文件内容,在项目中单独存一个文件,启动调试时,直接把配置文件内容贴到Value框里即可。


springcloud使用consul自定义配置k-v,无配置中心服务
https://blog.jeecloud.cn/2021/01/07/20210108035000/
作者
pshgao
发布于
2021年1月8日
许可协议