配置中心

配置 APP 仓库地址 sie-snest-config-project

需求

之前 IIDP 的配置都来自于 application.properties。如果 APP 想要增加自己的配置,也需要添加到 application.properties,而这样会导致配置文件堆积大量的配置。并且有可能导致冲突。

配置中心目前实现三点功能

  1. APP 可以将配置写到自己的 APP 里面,从而避免跟其他 APP 的配置造成命名冲突。
  2. 提供配置中心页面,可以在页面上动态修改配置,从而实现不停机动态修改 APP 的行为。
  3. 必填校验。APP 可以可以将配置项声明为必填项,那么从应用市场安装的时候会校验配置是否有值,如果没有填写值,将会安装失败。

使用例子

实现设计

声明配置

在 app.json 填入配置

"globalConfig": {
    "backendUrl": {
        "desc": "微服务后端URL",
        "value": "http://localhost"
    }
},
"appConfig": {
    "test": {
        "desc": "测试配置",
        "value": "123",
        "required": true
    }
}

配置分为两类

  1. globalConfig a. 由平台定义,一般是引擎有特殊用途的配置。
  2. appConfig a. 由 APP 自行定义,由 APP 业务上使用。

配置项说明

  • desc: 配置项的说明
    • 对于 globalConfig,desc 并不是必须的,因为平台开发者在引擎声明 GlobalConfig 的同时就写了描述。
  • value: 配置值,必须为字符串
  • required: 配置是否必填。如果为 true,那么应用安装的时候需要先填写配置项才能安装

使用示例

升级说明

在 apps 的 apps.json 添加 sie-snest-config 。

"apps": {
    "SDK": [
        "sie-snest-base-1.0-SNAPSHOT.jar",
        "sie-snest-file-1.0-SNAPSHOT.jar",
        "sie-snest-dict-1.0-SNAPSHOT.jar",
        "sie-snest-log-2.0-SNAPSHOT.jar",
        "sie-snest-config-1.0-SNAPSHOT.jar"
    ]
}

系统配置

声明配置

平台开发人员如果想要新增配置,在可以在 com.sie.snest.engine.config.GlobalConfig 这个枚举类中添加配置项。

因为 GlobalConfig 这个类是在引擎工程里,所以只有平台开发人员可以声明配置项。

使用配置

Optional<String> frontendUrl = ConfigUtils.getGlobalConfig(appName, appTag, GlobalConfig.FRONTEND_URL);

APP 设置系统配置

在 app.json 里面设置值

"globalConfig": {
    "frontendUrl": {
        "desc": "微服务前端URL",
        "value": "http://localhost"
    }
}

系统配置也可以设置为 required = true,这样安装 APP 的时候会校验是否填写了配置值。

应用配置

声明配置

APP 的配置只需要在 app.json 里面声明。

"appConfig": {
    "test": {
        "desc": "测试配置",
        "value": "",
        "required": true
    }
}

如果 value 为空字符串,required = true。应用上架的时候,该配置项默认为空,需要在配置中心填写了配置值后,才能安装。这样保证了应用安装完成后,在启动事件也能拿到对应的值。

使用配置

Optional<String> test = ConfigUtils.get(appName, appTag, "test");

配置中心

在开发者中心 - 配置中心,可以动态修改所有配置。并且配置会保存到数据库。

必填配置

如果配置项的 required 为 true。上架的时候,会校验 value 是否有值,如果没有值会提示先填写配置值。在配置中心修改保存的时候,也会校验是否有填写值。

"appConfig": {
    "test": {
        "desc": "测试配置",
        "value": "",
        "required": true
    }
}

安装前校验

修改配置时校验

配置热更新