You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS中TypeORM升级至3.x多租户:替换getConnectionManager咨询

TypeORM 3.x 替换 getConnectionManager 的解决方案

TypeORM 3.x 彻底重构了连接管理体系,移除了 Connection 和 getConnectionManager,改用 DataSource 作为核心连接对象,同时提供 DataSourceManager 来管理多数据源实例。以下是适配你的租户连接逻辑的具体修改方案:

核心修改点

  • 替换原 Connection 类型为 DataSource
  • 用 getDataSourceManager() 替代 getConnectionManager()
  • 废弃 createConnection,改用 new DataSource(options).initialize() 初始化连接
  • 连接状态判断从 isConnected 改为 isInitialized
  • 连接操作从 connect() 改为 initialize()

修改后的完整代码

import {
    DataSource,
    getDataSourceManager,
} from 'typeorm';
import { PostgresDataSourceOptions } from 'typeorm/driver/postgres/PostgresDataSourceOptions';

import * as tenantsOrmconfig from '../../tenants-orm.config';

export function getTenantConnection(tenantId: string): Promise<DataSource> {
    const connectionName = `tenant_${tenantId}`;
    const dataSourceManager = getDataSourceManager();

    if (dataSourceManager.has(connectionName)) {
        const dataSource = dataSourceManager.get(connectionName);
        return Promise.resolve(dataSource.isInitialized ? dataSource : dataSource.initialize());
    }

    const dataSource = new DataSource({
        ...(tenantsOrmconfig as PostgresDataSourceOptions),
        name: connectionName,
        schema: connectionName,
    });

    return dataSource.initialize();
}

关键细节说明

  1. 类型适配:将 PostgresConnectionOptions 替换为 PostgresDataSourceOptions,这是 TypeORM 3.x 中针对 Postgres 的数据源配置类型。
  2. 多实例管理:getDataSourceManager() 承担了原 getConnectionManager() 的角色,负责全局管理所有已初始化的 DataSource 实例。
  3. 连接初始化:new DataSource(options).initialize() 是 3.x 中官方推荐的连接初始化方式,替代了旧版的 createConnection。
  4. 状态判断:isInitialized 替代 isConnected,用于判断数据源是否已完成初始化并建立连接。

内容的提问来源于stack exchange,提问作者Paweł Baca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:20