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
相关产品推荐
相关产品推荐

