Skip to content

Data source

data-source 节定义数据库访问详细信息,同时也定义数据库选项。

Data source 设置

属性说明
data-source包含数据库连接设置的对象
data-source.database-type后端所用数据库:mssqlpostgresqlmysql
data-source.connection-string所选数据库类型的连接字符串
data-source.options数据库特定属性
data-source.options.set-session-context启用将 JSON Web Token (JWT) 声明作为会话上下文发送(仅 SQL Server)
data-source.health配置数据源运行状况检查的对象
data-source.health.enabled启用运行状况检查终结点
data-source.health.name运行状况报告中使用的标识符
data-source.health.threshold-ms运行状况检查查询允许的最大持续时间(毫秒)

格式概览

json
{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "set-session-context": <true> (default) | <false>
    },
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  },
  "data-source-files": ["<string>"]
}

Data source

ParentPropertyTypeRequiredDefault
$rootdata-sourceobject✔️ Yes-

嵌套属性

ParentPropertyTypeRequiredDefault
data-sourcedatabase-typeenum✔️ YesNone
data-sourceconnection-stringstring✔️ YesNone
data-sourceoptionsobject❌ NoNone

属性值

database-type说明最低版本
mssqlSQL Server2016
postgresqlPostgreSQL11
mysqlMySQL8

格式

json
{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "<key-name>": <string>
    }
  }
}

示例:SQL Server

json
"data-source": {
  "database-type": "mssql",
  "connection-string": "Server=localhost,1433;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;",
  "options": {
    "set-session-context": true
  }
}

NOTE

对于 SQL Server,数据墙DBW 使用 SqlClient。不同连接字符串变体的兼容性由该驱动决定。

使用 SESSION_CONTEXT

对于 SQL Server,数据墙DBW 可以将声明信息包含在 SQL 的 SESSION_CONTEXT 中。

sql
CREATE PROC GetUser @userId INT AS
BEGIN
    -- Use claims
    IF SESSION_CONTEXT(N'user_role') = 'admin'
    BEGIN
        RAISERROR('Unauthorized access', 16, 1);
    END

    SELECT Id, Name, Age, IsAdmin
    FROM Users
    WHERE Id = @userId;
END;

环境变量

使用环境变量可避免在配置文件中保存明文机密。

TIP

数据墙DBW 支持 @env() 函数,也支持 .env 文件。

json
"data-source": {
  "database-type": "mssql",
  "connection-string": "@env('SQL_CONNECTION_STRING')"
}

连接弹性

数据墙DBW 在遇到瞬时错误后,会使用指数退避(Exponential Backoff)重试数据库请求。

尝试次数第一次第二次第三次第四次第五次
秒数2s4s8s16s32s

Health (Data source)

ParentPropertyTypeRequiredDefault
data-sourcehealthobjectNo-

数据墙DBW 支持多个配置文件,每个配置文件都可以指向独立数据源。该配置块允许为每个数据源分别设置健康检查。

嵌套属性

ParentPropertyTypeRequiredDefault
data-source.healthenabledbooleanNotrue
data-source.healthnamestringNodatabase-type
data-source.healththreshold-msintegerNo1000

检查名称

由于多个配置文件可能指向同一类型的数据源,因此这些数据源在健康报告中可能难以区分。使用 name 可以分配一个仅用于健康报告的唯一标识标签。

检查行为

系统会针对给定数据源执行该数据库类型下最简单的查询,以验证连接是否可打开。使用 threshold-ms 可配置该查询允许完成的最大时长(毫秒)。

格式

json
{
  "data-source": {
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  }
}

数据墙DBW 产品文档与开发指南。