本文是继续上一篇博客SpringBoot使用Nacos进行application.yml配置管理_nacos application配置-CSDN博客
目录
一、踩坑记录
二、亲测成功
方法一
方法二
一、踩坑记录
参考网上的一些案例,看到网上有人建议 Nacos 可以直接配置成 Map 类型,后台使用 Java Map 类型获取就可以。配置如下:
map:
test:
key1: value1
key2: value2
key3: value3
(1)尝试了一个方式是把读取到的 Map 作为一个 Spring 的 Bean。
@Bean
@ConfigurationProperties(prefix = "map.test")
public Map<String, String> mapping() {
return new HashMap<>();
}
(2)
@Component
@RefreshScope
@ConfigurationProperties(prefix = "map")
public class NacosRefresh {
public void setTest(Map<String, String> test) {
this.test = test;
}
private Map<String, String> test;
}
但是我并没有成功,不知道为什么。。
启动项目之后倒是不会报错说是没有读取到配置信息。但是打开调试模式,会看到本地变量 map 是没有拉到值的。
二、亲测成功
下面就来分享一下我在配置 Map 类型的过程中使用的方法。
方法一
首先,我们需要在Nacos配置中心创建一个Map类型的配置。可以使用Nacos的Web界面或者API来完成配置的创建。
在Web界面中,可以选择"配置列表",然后点击"创建配置"按钮。在创建配置的界面的配置内容中,
新增如下,
conf-map:
id-1: 1
name-1: xiaoli
id-2: 2
name-2: xiaoming
SpringBoot项目bootstrap.yml配置文件不用改变。
在Spring Boot应用中,通过 @Value 注解注入Nacos中的配置,间接将配置的字符串解析成 Map 类型使用。
@Value("${conf-map.id-1}")
private String id1;
@Value("${conf-map.name-1}")
private String name1;
@Value("${conf-map.id-2}")
private String id2;
@Value("${conf-map.name-2}")
private String name2;
Map<String, String> confMap = new HashMap<String, String>>();
confMap.put(name1, id1);
confMap.put(name2, id2);
方法二
首先,我们需要在Nacos配置中心创建一个Map类型的配置。可以使用Nacos的Web界面或者API来完成配置的创建。
在Web界面中,可以选择"配置列表",然后点击"创建配置"按钮。在创建配置的界面的配置内容中,
完全不使用 Map 类型了,改成配置字符串,配置如下:
conf-map:"{\"xiaoli\":\"1\",
\"xiaoming\":\"2\"}"
SpringBoot项目bootstrap.yml配置文件不用改变。
在Spring Boot应用中,通过 @Value 注解注入Nacos中的配置,可以直接将配置的字符串解析成 Map 类型使用。
解析代码如下:
@Value("${conf-map}")
private String conf;
JSONObject json = JSONObject.parseObject(conf);
Map<String, String> confMap = JSONObject.parseObject(json.toJSONString(), new TypeReference<Map<String, String>>(){});
最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。