TypeORM 0.3.0及以上版本如何恢复旧版独立连接行为
TypeORM 0.3.x 恢复旧版连接使用行为方案
0.3.0版本TypeORM将核心连接入口从原有的Connection重构为DataSource,默认提供的createConnection兼容层没有做连接实例与全局连接池的隔离,调用close()时会直接销毁整个DataSource管理的连接池,这就是Pool is closed报错的直接原因。不需要降级版本,按以下方式调整即可完全恢复0.2.x版本的独立连接使用逻辑:
- 初始化连接时,不要直接使用默认导出的
createConnection方法,先手动实例化DataSource,再基于DataSource创建独立的Connection实例,参数和旧版完全兼容:
import { DataSource, Connection } from 'typeorm'; // 初始化DataSource,入参和旧版createConnection接收的配置完全一致 const dataSource = await new DataSource(options).initialize(); // 创建独立Connection实例,行为和0.2.x版本的Connection完全一致 const createdConnection: Connection = dataSource.createConnection();
- 模型绑定连接的逻辑无需修改,和旧版写法完全相同:
MyModel.useConnection(createdConnection);
- 任务执行完成后,只关闭当前创建的独立Connection实例即可,不会影响DataSource下的其他连接,也不会误销毁整个连接池:
await createdConnection.close();
关键注意点
- 不要直接调用
dataSource.destroy(),该方法会销毁整个DataSource管理的所有连接,和旧版close的作用范围不同 - 多连接场景下每个DataSource可以创建多个互相隔离的Connection实例,和0.2.x版本多连接的运作逻辑完全一致
- 实体层的
useConnection等API在0.3.x版本全量兼容,原有业务绑定逻辑不需要调整
内容的提问来源于stack exchange,提问作者user17145524
相关产品推荐
相关产品推荐

