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

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

相关推荐
Java水解1 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆3 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学3 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole3 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊4 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端
程序员鱼皮4 小时前
刚刚 Java 25 炸裂发布!让 Java 再次伟大
java·javascript·计算机·程序员·编程·开发·代码
浮游本尊4 小时前
Java学习第21天 - 微服务架构设计
java
渣哥5 小时前
Java CyclicBarrier 详解:原理、使用方式与应用场景
java
杨杨杨大侠5 小时前
打开 JVM 黑匣子——走进 Java 字节码(一)
java·jvm·agent