数据源配置:report_data_source
该表存储按租户管理的报表连接配置。保存、修改配置不预热目标连接;实际查询或连接测试才创建资源。连接凭据只描述存储方式,不在设计文档中写入实际值。
业务流程是管理员创建数据源,保存连接参数及容量限制;报表查询通过数据源 ID 读取当前租户的有效配置,再使用独立连接访问目标存储。修改配置会递增版本并淘汰旧连接资源,禁用后不可作为有效查询源,删除使用逻辑删除。元数据库保存配置,目标数据库提供报表数据,两者具有不同读写职责。
实体来源:ik_project/yudao-cloud/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/dal/dataobject/datasource/ReportDataSourceDO.java:12。
完整字段
“应用约束/默认值”来自创建请求与服务;数据库 DEFAULT/NOT NULL 单列在后文,两者已与本轮采集对照。
| 数据库列 | Java 字段 / 类型 | 语义与应用约束/默认值 | 声明行 |
|---|---|---|---|
id | id / Long | 数据源主键,@TableId | 27 |
name | name / String | 名称;必填,最多 100 字符 | 31 |
code | code / String | 编码;[a-z0-9_-]{1,64} | 35 |
source_type | sourceType / String | MYSQL、ES、TDENGINE、REDIS | 39 |
connection_config | connectionConfig / String | 规范化连接 JSON,恰含一种连接结构 | 43 |
password_cipher | passwordCipher / String | 密码密文;允许清空,非明文密码 | 47 |
status | status / Integer | 0 启用、1 禁用;创建默认 0 | 53 |
max_connections | maxConnections / Integer | 最大连接数;1~10,默认 3 | 57 |
connect_timeout_ms | connectTimeoutMs / Integer | 建连超时;1000~30000 ms,默认 5000 | 61 |
acquire_timeout_ms | acquireTimeoutMs / Integer | 等待资源超时;1~30000 ms,默认 5000 | 65 |
query_timeout_ms | queryTimeoutMs / Integer | 查询超时;1000~60000 ms,默认 30000 | 69 |
idle_timeout_ms | idleTimeoutMs / Integer | 空闲回收;60000~3600000 ms,默认 600000 | 73 |
max_rows | maxRows / Integer | 返回行数上限;1~10000,默认 5000 | 77 |
config_version | configVersion / Long | 创建为 1;每次成功修改加 1 | 81 |
remark | remark / String | 备注,最多 500 字符;可清空 | 85 |
tenant_id | tenantId / Long | 服务端当前租户 ID | TenantBaseDO:19 |
create_time | createTime / LocalDateTime | 创建自动填充 | BaseDO:30 |
update_time | updateTime / LocalDateTime | 创建/更新自动填充 | BaseDO:35 |
creator | creator / String | 创建者 ID | BaseDO:42 |
updater | updater / String | 更新者 ID | BaseDO:49 |
deleted | deleted / Boolean | 逻辑删除标志 | BaseDO:54 |
继承来源:ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java:14,以及 ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java:24。
应用约束来源:ik_project/yudao-cloud/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/controller/admin/datasource/vo/DataSourceCreateReqVO.java:17。
connection_config 的结构
该列对应 ConnectionConfigVO。下列只是键名及类型,不包含连接值。顶层只允许一种非空配置,不接受未知字段;数据库名、host、port 在保存时验证。
| 顶层键 | 子字段 | 规则 |
|---|---|---|
mysql | host:String、port:Integer、database:String、username:String、tlsEnabled:Boolean | port 默认 3306;TLS 默认 false |
es | endpoints:List<Endpoint>、username:String | 1~5 个端点;端点有 host、port(默认 9200)、scheme(默认 http,仅 http/https) |
tdengine | host:String、port:Integer、database:String、username:String、protocol:String | protocol 仅接受 REST;port 必须提供 |
redis | host:String、port:Integer、database:Integer、username:String、tlsEnabled:Boolean | port 默认 6379;database 默认 0;TLS 默认 false |
密码单独经过服务端加密存入 password_cipher;JSON 本身不含密码字段。更新密码使用 KEEP / CLEAR / REPLACE 语义。不得在文档样例里复制实际连接配置或密文。
来源:ik_project/yudao-cloud/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/controller/admin/datasource/vo/ConnectionConfigVO.java:12;同模块 service/datasource/ReportConnectionConfigSupport.java:23、service/datasource/ReportDataSourceServiceImpl.java:143。
一致性、关系与查询模式
- 创建时从上下文设置租户;查询、更新、删除除租户插件外仍显式限制
tenant_id。启用查询要求status=0且未删除。 - 修改和删除使用
id + tenant_id + config_version + deleted + status条件;影响行数不为 1 即冲突。code和source_type不在当前更新字段白名单中。 - 创建捕获唯一键冲突。实测唯一键是
uk_tenant_code(tenant_id,code),不含deleted,逻辑删除不会释放同租户编码。 - 数据源分页支持 name 模糊匹配、code/source_type/status 精确匹配、create_time 范围,按 id 倒序。实体 XML Mapper 是空壳,没有另外的表或 JOIN。
- 独立连接池以
(tenantId, dataSourceId)为键,配置版本改变时淘汰旧资源;当前运行借用并发为 ES 串行、其他类型最多min(2,maxConnections),不应把max_connections直接解释为所有引擎的执行并发。 - 查询引用数据源 ID 及 configVersion;连接表与外部物理对象之间是运行时配置关系,没有本模块声明的数据库外键。
来源:ik_project/yudao-cloud/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/service/datasource/ReportDataSourceServiceImpl.java:31、:47、:79、:157;同模块 dal/mysql/datasource/ReportDataSourceMapper.java:20、framework/datasource/ReportDataSourceResourceManager.java:17、:130、service/datasource/ReportDataSourceQueryService.java:24。
实测物理结构与差异
采集时间:2026-09-18 20:51,库 ik_yudao_report,MySQL 8.0.35;InnoDB、utf8mb4_unicode_ci。21 个源码字段全部存在,无额外列。— 表示未声明默认值。
| 列 | 实际 SQL 类型 | 可空 | 数据库默认/额外行为 |
|---|---|---|---|
id | bigint | 否 | —;auto_increment |
name | varchar(100) | 否 | — |
code | varchar(64) | 否 | — |
source_type | varchar(16) | 否 | — |
connection_config | text | 否 | —;并非物理 JSON 列 |
password_cipher | text | 是 | NULL |
status | tinyint | 否 | 0 |
max_connections | int | 否 | 3 |
connect_timeout_ms | int | 否 | 5000 |
acquire_timeout_ms | int | 否 | 5000 |
query_timeout_ms | int | 否 | 30000 |
idle_timeout_ms | int | 否 | 600000 |
max_rows | int |