【项目实践】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开发追求者9 分钟前
vscode导入springboot项目
java·ide·spring boot·vscode
麦烤楽鸡翅10 分钟前
坚持60s (攻防世界)
java·网络安全·jar·ctf·misc·反编译·攻防世界
熊猫比分站12 分钟前
让电竞数据实时跳动:Spring Boot 后端 + Vue 前端的完美融合实践
前端·vue.js·spring boot
Wilson Chen25 分钟前
Spring Boot 多级缓存实现与优化:从本地缓存到 Redis
spring boot·redis·缓存
倦王34 分钟前
Linux看ip,改用户名字加权限,在单独用户下设置miniconda
linux·服务器·tcp/ip
少废话h42 分钟前
Flume Kafka源与汇的topic覆盖问题解决
java·linux·kafka·flume
激动的兔子1 小时前
Geoserver修行记-连接瀚高数据库显示java.sql.SQLException: org.postgresql.util.PSQLException
java·geoserver·瀚高数据库
qq_2153978971 小时前
docker 管理工具 Portainer安装
运维·服务器·docker
一 乐1 小时前
健康打卡|健康管理|基于java+vue+的学生健康打卡系统设计与实现(源码+数据库+文档)
android·java·数据库·vue.js·spring boot·微信小程序
ghie90901 小时前
使用Java实现用户的注册和登录流程
java·数据库·oracle