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(); }
关键细节说明
- 类型适配:将
PostgresConnectionOptions替换为PostgresDataSourceOptions,这是 TypeORM 3.x 中针对 Postgres 的数据源配置类型。 - 多实例管理:
getDataSourceManager()承担了原getConnectionManager()的角色,负责全局管理所有已初始化的DataSource实例。 - 连接初始化:
new DataSource(options).initialize()是 3.x 中官方推荐的连接初始化方式,替代了旧版的createConnection。 - 状态判断:
isInitialized替代isConnected,用于判断数据源是否已完成初始化并建立连接。
内容的提问来源于stack exchange,提问作者Paweł Baca
相关产品推荐
相关产品推荐

