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

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

相关推荐
2501_9327502613 分钟前
Android 数据持久化解析
android·java
abcy07121313 分钟前
flink窗口类型
开发语言·python·算法
-银雾鸢尾-16 分钟前
C#中的继承
开发语言·c#
糖果店的幽灵17 分钟前
【langgraph 从入门到精通graphApi 篇】Memory 与长期记忆
运维·服务器·人工智能·langgraph
zhanghaha131427 分钟前
Python语言基础:2_环境搭建
开发语言·python
NWU_LK1 小时前
【WebFlux】第三篇 —— 常用操作符与数据流转换
java
phltxy8 小时前
LangChain从模型输出到RAG数据管道实战
服务器·人工智能·深度学习·语言模型·langchain
Wang's Blog8 小时前
Go-Zero项目开发4: 用户服务搜索、详情与统一错误处理
开发语言·golang
我星期八休息9 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
梅雅达编程笔记9 小时前
零基础学 Python 第14章 | 模块、包与第三方库
开发语言·python·django·numpy·pandas