添加 exists setWithCreate 方法. 添加更多README.md例子介绍

This commit is contained in:
eson 2022-06-20 14:27:50 +08:00
parent c0d72db1f0
commit 91bf185f75
3 changed files with 166 additions and 10 deletions

View File

@ -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.

View File

@ -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<String, Object>) 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<String, Object>)curValue;
}
cur.put(keys[keys.length - 1], value);
}
}
/**

View File

@ -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<String, Object> data
var key2 = (Map<String, Object>) (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;
});
}
}