【项目实践】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>>(){});

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

相关推荐
微石科技5 分钟前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
SomeB1oody10 分钟前
【RustyML入门】5.1. 回归指标
开发语言·后端·机器学习·rust·教程
学计算机的计算基12 分钟前
TCP 传输层硬核整理:三次握手、四次挥手、拥塞控制一次讲透
java·网络·笔记·网络协议·算法
复园电子15 分钟前
USB服务器架构设计分析:多设备管理、权限控制与安全传输机制
运维·服务器·安全
龙虾PRO21 分钟前
2026 DeepSeek Harness 部署完整教程:npx 一键启动至 Python SDK 全流程接入
开发语言·python
都叫我大帅哥29 分钟前
@EnableTransactionManagement 详解:Spring 声明式事务的基石
java·spring
2602_959960921 小时前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题
小新讲网安2 小时前
WiFi安全攻防实战:WPA3新协议与传统破解技术全解析
开发语言·网络·安全·php·漏洞·nmap·漏洞检测
Doraemomo2 小时前
Linux编程-线程
linux·运维·服务器
必须会一定会8 小时前
Agent Plugins 1.0实战:plugin.json、skills、mcp.json目录结构与迁移
开发语言·人工智能·ai编程