使用环境变量
模块和组件中支持定义环境变量,并且支持在架构和应用配置中进行配置。
定义环境变量
模块的配置文件在 service/模块名/deploy 目录下,其中
- dev.def.xml 文件中,定义的是开发环境的配置信息
- production.def.xml 文件中,定义的是正式环境的配置信息。
xxx.def.xml 文件中 properties 节点下的 property 节点就是环境变量,例如下面是环境变量 autoNotify 的定义
<service>
<properties>
<property name="autoNotify" env="UAA_AUTO_NOTIFY" value="false" readonly="false">
<label label="是否自动通知"/>
</property>
</properties>
</service>
property 的属性说明见下表
属性 | 说明 |
---|---|
name | 属性名 |
env | 环境变量名,非必填,为空时,系统根据模块名和属性名自动生成,参见下面的环境变量名生成规则 |
value | 值 |
readonly | 是否只读 |
label | 显示名称 |
环境变量名生成规则
- 在模块中定义的环境变量,属性名变成大写,前面加“模块名_”
例如:在 service/main/deploy/*.def.xml 文件中定义的环境变量 autoNotify,环境变量名为 MAIN_AUTONOTIFY
- 在组件中定义的环境变量,属性名变成大写,前面加“COMP组件名称(大写)”
例如:在 service/comp/basedata/deploy/*.def.xml 文件中定义的环境变量 autoNotify,环境变量名为 COMP_BASEDATA_AUTONOTIFY
获取环境变量
Java 的 System 类提供了 getenv() 和 getProperty() 两个方法获取环境变量,在云端运行时(包括开发环境和正式环境),使用 getProperty() 获取,在本地 IDE 运行时,使用 getenv() 获取。
系统提供了 ContextUtil.getEnv("环境变量名") 方法获取环境变量,在云端环境和本地环境都能使用。
配置环境变量
- 在开发环境中配置环境变量
模块或组件的环境变量可在架构中配置,如下图所示。选择开发架构,配置开发环境变量,选择运行架构,配置生产环境变量。
- 在生产环境中配置环境变量
在应用/服务管理中,配置每个应用的环境变量,如下图所示
环境变量可配置,需要在模块目录下的 configurable.schema.json 文件中定义该环境变量的配置界面。
例如,database2 组件新增 testEnv 环境设置,代码如下。
{
"type": "object",
"properties": {
"dbType": {
"type": "string",
"title": "数据库类型",
"enum": [
"pgsql",
"mysql",
"oracle",
"sqlserver",
"db2",
"kingbase8"
],
"enumNames": [
"Postgres",
"Mysql",
"Oracle",
"Sqlserver",
"DB2",
"KingBase8"
],
"widget": "select"
},
"dbHost": {
"type": "string",
"title": "数据库服务地址"
},
"dbPort": {
"type": "number",
"title": "数据库端口"
},
"dbUser": {
"type": "string",
"title": "数据库用户名"
},
"dbPasswd": {
"type": "string",
"title": "数据库密码"
},
"dbName": {
"type": "string",
"title": "数据库名称"
},
"dbSchema": {
"type": "string",
"title": "数据库Schema"
},
"dbProperties": {
"type": "string",
"title": "数据库连接属性"
},
"displayLabel": {
"type": "string",
"title": "数据库显示名"
},
"testEnv": {
"type": "string",
"title": "环境设置测试"
}
}
}
运行效果如下图所示
该配置使用 XRender 模板,在门户的统一配置项页面中提供了4种常用的模板(输入、单选、多选、开关),更多模板参考 https://xrender.fun/