动态数据源:内网 Host/Port 映射(本地连生产库)
1. 背景
动态数据源的连接信息来自表 platform_dev_db_connect,其中 db_hostname_ip / db_port 可能存的是内网地址。开发者在本地直连生产主库(能访问表数据)时,往往不具备同网段网络环境,导致动态数据源在首次使用时无法连通。
该特性用于:在不修改数据库表数据的前提下,通过一个独立的文本文件对内网 host/port 做“本地映射重写”,让动态数据源在本地环境可以连通(例如通过公网、VPN 或 SSH Tunnel)。
2. 生效范围
- 仅影响动态数据源创建 JDBC URL 过程中使用到的
host/port。 - 不影响库名、用户名、密码等字段。
- 不启用/不配置映射文件时,行为与原先保持一致(仍按表内 host/port 直连)。
3. 使用方式
3.1 准备映射文件
默认路径:应用运行目录下的 conf/db-host-map.txt
也可以通过环境变量指定绝对路径:
GEELATO_DS_HOST_MAP_FILE=D:\path\to\db-host-map.txt
3.2 文件格式(每行一条)
- 空行忽略
- 以
#或//开头的行忽略(注释) - 支持如下三种写法:
sourceHost=targetHostsourceHost:sourcePort=targetHost:targetPortsourceHost=targetHost:targetPort
说明:
sourceHost支持 IP 或域名- 当同时存在
sourceHost:sourcePort与sourceHost两种映射时,优先命中sourceHost:sourcePort
3.3 示例
SSH Tunnel(推荐本地排障方式)
表里为 172.20.10.8:3306,本地用 SSH 端口转发到 127.0.0.1:13306:
172.20.10.8:3306=127.0.0.1:13306
公网直连
表里为 172.20.10.8:3306,实际可达公网为 47.xx.xx.xx:3306:
172.20.10.8:3306=47.xx.xx.xx:3306
只改 host(不改端口)
172.20.10.8=47.xx.xx.xx
4. 实现要点
- 映射文件由动态数据源模块读取与缓存,并基于“文件最后修改时间”自动刷新。
- 在创建
HikariDataSource拼接 JDBC URL 前,使用映射结果重写 host/port。
5. 注意事项
- 建议只在本地/排障场景使用该映射;生产环境通常不应依赖此类重写。
- 映射文件建议不要提交到版本库,避免泄露公网地址、跳板策略或端口规划。
- 映射只解决“地址不可达”,不解决账号权限、白名单、SSL、网络抖动等问题。