# 统一配置模块

## 内容介绍

- [统一配置模块](#统一配置模块)
  - [内容介绍](#内容介绍)
  - [关于](#关于)
  - [Getting Started](#getting-started)
    - [预需要](#预需要)
    - [使用例子](#使用例子)
      - [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方法)
  - [开发者](#开发者)

## 关于

* 由于历史项目配置混乱, 循环去mysql表查询配置不合理.
* 重写一个基于nacos配置模块

## Getting Started 

### 预需要

```
安装nacos. 配置好group dataId 
```

java项目resources文件夹里 application.properties 里配置
```
yuandian.dataflow.config.nacos.server.addr=config.yuandian.local:8848
```

在pom.xml文件里添加依赖
```pom
<dependency>
  <groupId>com.yuandian.common</groupId>
  <artifactId>config</artifactId>
  <version>${具体版本}</version>
</dependency>
```

### 使用例子

#### get方法 获取keys的值. keys必须存在, 否则异常
```java
Config.UseConfig((cnf) -> {
  /**
   *  nacos config 默认 group=yuandian dataId=dataflow
   *  key1:
   *      key2:
   *          value
   */
  log.info("{}",cnf.get("key1", "key2")); //value 
  return null;
});
```


 
#### set方法 赋值. keys必须存在, 否则异常
```java
Config.UseConfig((cnf) -> {
  cnf.seek("key1", "key2").set("do_set"); // seek先定位keys
  try {
    cnf.update(); // 每个写操作都需要执行 update()
  } catch (NacosException e) {
    e.printStackTrace();
  }
  /**
   *  nacos config 默认 group=yuandian dataId=dataflow
   *  key1:
   *      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;
});
```

#### 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").createKeys().set("do_set");
  try {
      cnf.update(); // 每个写操作都需要执行 update()
  } catch (NacosException e) {
      e.printStackTrace();
  }
  return null;
});
```

#### remove方法. 删除key. 和map删除原理一样
```java
Config.UseConfig((cnf) -> {
  cnf.remove("create1", "create2");
  try {
    log.info("{}",cnf.update()); // 所有增加删除操作要最后同步到nacos. 都需要update
  } catch (NacosException e) {
    e.printStackTrace();
  }
        cnf.remove("create1");
  try {
    log.info("{}",cnf.update()); // 所有增加删除操作要最后同步到nacos. 都需要update
  } catch (NacosException e) {
    e.printStackTrace();
  }
  return null;
});
```

#### 非默认group.dataId方法
```java
Config.UseConfig("org.fortest", (cnf)->{
  /**
 *  nacos config group=org dataId=fortest
 *  test: groupAndDataId
 */
  log.info("{}",cnf.get("test")); // groupAndDataId
  return null;
});
```



## 开发者

需要在settings.xml

```xml
<server>
  <id>yuandian-nexus</id>
  <username>${帐号}</username>
  <password>${密码}</password>
</server>
```

设置好公司nexus域名

```txt
http://mvn.yuandian.com/repository/maven-releases
http://mvn.yuandian.com/repository/maven-snapshots

如: 192.168.1.113 mvn.yuandian.com
```