From 91bf185f75deb94d60cd6b0a72fec51f0ba325b2 Mon Sep 17 00:00:00 2001 From: eson Date: Mon, 20 Jun 2022 14:27:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20exists=20setWithCreate=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95.=20=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9AREADM?= =?UTF-8?q?E.md=E4=BE=8B=E5=AD=90=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 67 ++++++++++++++--- src/main/java/com/yuandian/common/Config.java | 36 +++++++++ .../java/com/yuandian/common/ConfigTest.java | 73 +++++++++++++++++++ 3 files changed, 166 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 161c6f4..ffd6842 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,12 @@ - [Getting Started](#getting-started) - [预需要](#预需要) - [使用例子](#使用例子) - - [get方法](#get方法) - - [set方法](#set方法) - - [createKeys方法](#createkeys方法) - - [remove方法](#remove方法) + - [get方法 获取keys的值. keys必须存在, 否则异常](#get方法-获取keys的值-keys必须存在-否则异常) + - [set方法 赋值. keys必须存在, 否则异常](#set方法-赋值-keys必须存在-否则异常) + - [setWithCreate方法 赋值. 如果key不存在就创建](#setwithcreate方法-赋值-如果key不存在就创建) + - [exists方法 判断keys 是否存在](#exists方法-判断keys-是否存在) + - [createKeys方法 创建keys. 也可以使用 setWithCreate](#createkeys方法-创建keys-也可以使用-setwithcreate) + - [remove方法. 删除key. 和map删除原理一样](#remove方法-删除key-和map删除原理一样) - [非默认group.dataId方法](#非默认groupdataid方法) - [Usage](#usage) @@ -44,7 +46,7 @@ yuandian.dataflow.config.nacos.server.addr=config.yuandian.local:8848 ### 使用例子 -#### get方法 +#### get方法 获取keys的值. keys必须存在, 否则异常 ```java Config.UseConfig((cnf) -> { /** @@ -57,11 +59,13 @@ Config.UseConfig((cnf) -> { return null; }); ``` + + -#### set方法 +#### set方法 赋值. keys必须存在, 否则异常 ```java Config.UseConfig((cnf) -> { - cnf.seek("key1", "key2").set("do_set"); + cnf.seek("key1", "key2").set("do_set"); // seek先定位keys try { cnf.update(); // 每个写操作都需要执行 update() } catch (NacosException e) { @@ -73,19 +77,60 @@ Config.UseConfig((cnf) -> { * key2: * do_set */ + +cnf.seek("key1", "key2").set("do_set"); // seek先定位keys + try { + cnf.update(); // 每个写操作都需要执行 update() + } catch (NacosException e) { + e.printStackTrace(); + } return null; }); ``` +#### setWithCreate方法 赋值. 如果key不存在就创建 +```java +Config.UseConfig((cnf) -> { +int[] values = new int[]{1,2,3} ; // 数组配置 +cnf.seek("listKeys1", "listKeys2").setWithCreate( values ); // 如果不存在key创建. +// listKeys1: +// listKeys2: +// - 1 +// - 2 +// - 3 +try { + log.info("{}",cnf.update()); +} catch (NacosException e) { + e.printStackTrace(); +} +return null; +}); +``` -#### createKeys方法 +#### exists方法 判断keys 是否存在 +```java +Config.UseConfig((cnf) -> { +// listKeys1: +// listKeys2: +// - 1 +// - 2 +// - 3 +Config.UseConfig((cnf) -> { + log.info("{}", cnf.exists("listKeys1")); // true + log.info("{}", cnf.exists("listKeys1", "listKeys2"));// true + return null; + }); +}); +``` + +#### createKeys方法 创建keys. 也可以使用 setWithCreate ```java Config.UseConfig((cnf) -> { /** * nacos config 默认 group=yuandian dataId=dataflow * create_keys: do_set */ - cnf.seek("create_keys").set("do_set"); + cnf.seek("create_keys").createKeys().set("do_set"); try { cnf.update(); // 每个写操作都需要执行 update() } catch (NacosException e) { @@ -95,7 +140,7 @@ Config.UseConfig((cnf) -> { }); ``` -#### remove方法 +#### remove方法. 删除key. 和map删除原理一样 ```java Config.UseConfig((cnf) -> { cnf.remove("create1", "create2"); @@ -126,6 +171,8 @@ Config.UseConfig("org.fortest", (cnf)->{ }); ``` + + ## Usage Add notes about how to use the system. diff --git a/src/main/java/com/yuandian/common/Config.java b/src/main/java/com/yuandian/common/Config.java index 478f659..63bfacb 100644 --- a/src/main/java/com/yuandian/common/Config.java +++ b/src/main/java/com/yuandian/common/Config.java @@ -143,6 +143,22 @@ public class Config { return cur.get(keys[keys.length - 1]); } + /** + * 判断 keys 是否存在 + * + * @param keys 获取的key值 + * @return + */ + public boolean exists(String... keys) { + var cur = data; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + cur = (Map) cur.get(key); + } + + return cur.get(keys[keys.length-1]) != null; + } + /** * * 用于定位keys的路径后的操作. 创建keys后赋值. 如果存在keys, 可以直接赋值, 不存在则直接报错 @@ -195,6 +211,26 @@ public class Config { } cur.put(keys[keys.length - 1], value); } + + /** + * 定位后赋值, 如果key不存在就创建 + * + * @param value 赋值 + */ + public void setWithCreate(Object value) { + var cur = config.data; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + var curValue = cur.get(key); + if(curValue == null) { + curValue = new LinkedHashMap<>(); + cur.put(key, curValue); + } + cur = (Map)curValue; + } + + cur.put(keys[keys.length - 1], value); + } } /** diff --git a/src/test/java/com/yuandian/common/ConfigTest.java b/src/test/java/com/yuandian/common/ConfigTest.java index 96ab104..3229ca1 100644 --- a/src/test/java/com/yuandian/common/ConfigTest.java +++ b/src/test/java/com/yuandian/common/ConfigTest.java @@ -1,6 +1,8 @@ package com.yuandian.common; import java.time.Instant; +import java.util.ArrayList; +import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -171,6 +173,8 @@ public class ConfigTest { return null; }); } + + @Test @Order(1) void testLabelConfig() throws Exception { @@ -181,4 +185,73 @@ public class ConfigTest { return null; }); } + + + + + @Test + @Order(1) + void testSetListValues() throws Exception { + + Config.UseConfig((cnf) -> { + int[] values = new int[]{1,2,3} ; + cnf.seek("listKeys1", "listKeys2").setWithCreate( values ); // 如果不存在key创建. + // listKeys1: + // listKeys2: + // - 1 + // - 2 + // - 3 + + try { + log.info("{}",cnf.update()); + } catch (NacosException e) { + e.printStackTrace(); + } + return null; + }); + } + + + @Test + @Order(1) + void testMapData() throws Exception { + + Config.UseConfig((cnf)->{ + int[] values = new int[]{1,2,3} ; + cnf.seek("listKeys1", "listKeys2").setWithCreate( values ); // 如果不存在key创建. + // listKeys1: + // listKeys2: + // - 1 + // - 2 + // - 3 + try { + log.info("{}",cnf.update()); + } catch (NacosException e) { + e.printStackTrace(); + } + return null; + }); + + Config.UseConfig((cnf) -> { + log.info("{}", cnf.data); // Map data + var key2 = (Map) (cnf.data.get("listKeys1")); + ((int[])key2.get("listKeys2"))[1] = 10; // 数组 1 2 3 的2为 10 + try { + log.info("{}",cnf.update()); + } catch (NacosException e) { + e.printStackTrace(); + } + return null; + }); + } + + @Test + @Order(2) + void testExists() throws Exception { + Config.UseConfig((cnf) -> { + log.info("{}", cnf.exists("listKeys1")); + log.info("{}", cnf.exists("listKeys1", "listKeys2")); + return null; + }); + } } \ No newline at end of file