返回 导航

SpringBoot / Cloud

hangge.com

SpringCloud - 服务注册与配置中心Nacos使用详解6(配置中心3:共享配置)

作者:hangge | 2020-12-10 08:10
    当一个项目中的服务数量增加后,配置文件也会相应地增加。而多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,这样每个服务都可以通过 Nacos 进行共享配置的读取。

六、配置中心使用教程2:共享配置

1,基本用法

(1)我们在之前的基础上,增加两个配置:share-config1.properties share-config2.properties(仍然使用默认 Group)。
share.config1=共享配置1
share.config2=共享配置2

(2)接着修改项目的配置文件 bootstrap.properties,通过 spring.cloud.nacos.config.shared-configs 属性指定要读取共享配置文件的 DataID(多个文件用分隔):
注意:这种方式虽然简单,但无法指定分组(必须与默认配置在同一个 Group),也无法自动刷新。
spring.cloud.nacos.config.shared-configs=share-config1.properties,share-config2.properties

(3)接着我们对之前的 Controller 进行修改,在原来的基础上增加了共享配置里的属性获取与输出:
@RefreshScope
@RestController
public class HelloController {
    @Value("${from}")
    private String from;

    @Value("${share.config1}")
    private String shareConfig1;

    @Value("${share.config2}")
    private String shareConfig2;

    @GetMapping("/test")
    public String test(){
        return this.from + "<br>" + this.shareConfig1 + "<br>" + this.shareConfig2;
    }
}

(4)启动项目,访问 /test 接口,可以看到无论是项目默认配置的内容,还是共享配置的内容,都能成功获取到:

2,进阶用法

(1)前面的样例中共享配置必须与项目默认配置文件处于相同的 Group,但有时我们共享配置是处于其他分组的,比如下面我们新增了两个配置 share-config3.properties share-config4.properties(分别处于 SHARE3_GROUP SHARE4_GROUP):

(2)接着同样修改项目的配置文件 bootstrap.properties,不过这次我们使用 spring.cloud.nacos.config.extension-configs[0] 属性来指定各个共享配置的 dataIdgroup 以及是否自动刷新。
注意:同上面的方式相比,这种方式可以指定分组,也支持自动刷新。
spring.cloud.nacos.config.extension-configs[0].data-id=share-config3.properties
spring.cloud.nacos.config.extension-configs[0].group=SHARE3_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=share-config4.properties
spring.cloud.nacos.config.extension-configs[1].group=SHARE4_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true

(3)接着我们对之前的 Controller 进行修改,在原来的基础上增加了共享配置里的属性获取与输出:
@RefreshScope
@RestController
public class HelloController {
    @Value("${from}")
    private String from;

    @Value("${share.config3}")
    private String shareConfig3;

    @Value("${share.config4}")
    private String shareConfig4;

    @GetMapping("/test")
    public String test(){
        return this.from + "<br>" + this.shareConfig3 + "<br>" + this.shareConfig4;
    }
}

(4)启动项目,访问 /test 接口,可以看到无论是项目默认配置的内容,还是共享配置的内容(即使不在同一个分组),都能成功获取到(并且支持自动刷新):

附:两种方式结合使用

(1)上面这两种共享配置的实现方式不是互斥的,在同一个项目中可以结合使用:
spring.cloud.nacos.config.shared-configs=share-config1.properties,share-config2.properties

spring.cloud.nacos.config.extension-configs[0].data-id=share-config3.properties
spring.cloud.nacos.config.extension-configs[0].group=SHARE3_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=share-config4.properties
spring.cloud.nacos.config.extension-configs[1].group=SHARE4_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true

(2)Controller 这边稍作修改,将各个共享配置里的属性都输出到页面上,运行结果如下:
@RefreshScope
@RestController
public class HelloController {
    @Value("${from}")
    private String from;

    @Value("${share.config1}")
    private String shareConfig1;

    @Value("${share.config2}")
    private String shareConfig2;

    @Value("${share.config3}")
    private String shareConfig3;

    @Value("${share.config4}")
    private String shareConfig4;

    @GetMapping("/test")
    public String test(){
        return this.from + "<br>" + this.shareConfig1 + "<br>" + this.shareConfig2
                + "<br>" + this.shareConfig3 + "<br>" + this.shareConfig4;
    }
}
评论

全部评论(0)

回到顶部