【项目实践】SpringBoot Nacos配置管理 map数据

本文是继续上一篇博客SpringBoot使用Nacos进行application.yml配置管理_nacos application配置-CSDN博客

目录

一、踩坑记录

二、亲测成功

方法一

方法二


一、踩坑记录

参考网上的一些案例,看到网上有人建议 Nacos 可以直接配置成 Map 类型,后台使用 Java Map 类型获取就可以。配置如下:

java 复制代码
map:
  test:
    key1: value1
    key2: value2
    key3: value3

(1)尝试了一个方式是把读取到的 Map 作为一个 Spring 的 Bean。

java 复制代码
@Bean
@ConfigurationProperties(prefix = "map.test")
public Map<String, String> mapping() {
    return new HashMap<>();
}

(2)

java 复制代码
@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界面中,可以选择"配置列表",然后点击"创建配置"按钮。在创建配置的界面的配置内容中,

新增如下,

XML 复制代码
conf-map:
  id-1: 1
  name-1: xiaoli
  id-2: 2
  name-2: xiaoming

SpringBoot项目bootstrap.yml配置文件不用改变。

在Spring Boot应用中,通过 @Value 注解注入Nacos中的配置,间接将配置的字符串解析成 Map 类型使用。

java 复制代码
@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 类型了,改成配置字符串,配置如下:

java 复制代码
conf-map:"{\"xiaoli\":\"1\",
\"xiaoming\":\"2\"}"

SpringBoot项目bootstrap.yml配置文件不用改变。

在Spring Boot应用中,通过 @Value 注解注入Nacos中的配置,可以直接将配置的字符串解析成 Map 类型使用。

解析代码如下:

java 复制代码
@Value("${conf-map}")
private String conf;

JSONObject json = JSONObject.parseObject(conf);
Map<String, String> confMap = JSONObject.parseObject(json.toJSONString(), new TypeReference<Map<String, String>>(){});

最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。

相关推荐
为何创造硅基生物25 分钟前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好27 分钟前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~32 分钟前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李36 分钟前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8291 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅1 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
wangqiaowq1 小时前
windows下nginx的安装
linux·服务器·前端
之歆1 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁2 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y2 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git