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

TypeORM中getConnectionManager已弃用,如何获取默认DataSourceManager?

TypeORM 替换弃用方法实现多数据库迁移

TypeORM 0.3.x版本起,getConnectionManager()和createConnection()已被废弃,官方改用DataSource类管理数据库连接。针对多数据库场景下关闭默认连接、切换数据库执行迁移的需求,可按以下方式改造代码:

核心改造思路

手动维护已创建的DataSource实例映射,替代旧的连接管理器功能;用DataSource的initialize()/destroy()方法替代旧的连接创建/关闭逻辑。

改造后的代码

// 全局维护已创建的数据源实例,替代旧的ConnectionManager
const dataSourceMap = new Map<string, DataSource>();

// 检查并关闭默认数据源
const defaultDataSource = dataSourceMap.get('default');
if (defaultDataSource && defaultDataSource.isInitialized) {
  await defaultDataSource.destroy();
  dataSourceMap.delete('default');
}

// 创建目标数据库的数据源配置
const targetDataSource = new DataSource({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'Password@1',
  database: databaseName,
  migrations: ['dist/database/migrations/*.js'],
  name: databaseName, // 用数据库名作为数据源唯一标识
});

// 初始化数据库连接
await targetDataSource.initialize();
dataSourceMap.set(databaseName, targetDataSource);

try {
  // 执行迁移
  await targetDataSource.runMigrations();
  console.log('Migrations ran successfully...');
} catch (e) {
  console.log(e);
  console.log('Failed to run migrations....');
} finally {
  // 可选:迁移完成后销毁连接,避免资源泄漏
  await targetDataSource.destroy();
  dataSourceMap.delete(databaseName);
}

关键替换说明

  • 用Map<string, DataSource>手动管理所有数据源实例,替代旧的getConnectionManager()功能
  • 用isInitialized属性判断数据源是否已建立连接,替代旧的isConnected
  • 用destroy()方法销毁数据源连接,替代旧的close()
  • 创建DataSource实例后必须调用initialize()才能建立连接、执行迁移
  • 若项目中默认数据源是通过其他方式初始化的,需将其加入dataSourceMap统一管理

内容的提问来源于stack exchange,提问作者Ezile Mdodana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:45:16