FoalTS集成TypeORM配置多数据库连接的异常问题咨询
TypeORM 多数据库/多连接适配FoalTS解决方案
问题根因
- FoalTS 框架底层初始化TypeORM时会默认查找名为
default的连接,无该配置时直接抛出ConnectionNotFoundError错误 - 多独立连接配置模式下,实体上声明的
@Entity({ database: XXX })属性不会生效,TypeORM只会采用对应连接配置中填写的database参数 - 单连接下访问多个数据库的需求,不需要配置多个TypeORM连接,仅需要配置一个拥有所有目标库访问权限的公共连接即可
场景1:单数据库实例下跨库访问
该场景适用于多个数据库属于同一个MSSQL实例、使用同一套账号权限的情况,也就是你当前标注实体database属性的需求:
- 调整ormconfig配置,合并为单个
default连接,删除原有多连接拆分:
module.exports = { name: 'default', type: 'mssql', host: '你的数据库实例地址', username: '通用账号', // 账号需同时拥有所有目标库的读写权限 password: '账号密码', // 此处填任意一个常用库即可,实体的database属性会覆盖该配置 database: 'ABC', // 重要:扫描所有库对应的实体文件 entities: ['src/app/**/*.entity.ts'], // 其他原有配置项保持不变 // ... }
- 保留现有实体上的
@Entity({ database: "XXX" })声明,无需修改,TypeORM执行查询时会自动拼接对应库名前缀实现跨库访问 - 直接使用FoalTS原生依赖注入获取仓库即可,无需额外指定连接参数:
import { InjectRepository } from '@foal/typeorm'; import { Repository } from 'typeorm'; import { Reason } from './reason.entity'; import { Order } from './order.entity'; export class DemoService { constructor( @InjectRepository(Reason) private reasonRepo: Repository<Reason>, @InjectRepository(Order) private orderRepo: Repository<Order>, ) {} // reasonRepo 自动访问ABC库,orderRepo自动访问XYZ库 }
场景2:多独立数据库实例的多连接管理
该场景适用于多个数据库属于不同MSSQL实例、使用不同账号权限的情况,需要通过连接名区分访问:
- 保留原有多连接配置,额外补充一个空的
default连接兼容FoalTS初始化检查即可:
module.exports = [ { name: 'default', type: 'mssql', // 随便填写合法配置即可,不会实际投入使用 database: 'temp', host: '127.0.0.1', username: 'temp', password: 'temp', entities: [] }, { name: 'db1', type: 'mssql', database: 'ABC', // db1对应实例的配置 host: '实例1地址', username: '实例1账号', password: '实例1密码', entities: ['src/app/**/reason.entity.ts'] // ...其他配置 }, { name: 'db2', type: 'mssql', database: 'XYZ', // db2对应实例的配置 host: '实例2地址', username: '实例2账号', password: '实例2密码', entities: ['src/app/**/order.entity.ts'] // ...其他配置 } ]
- 注入仓库时指定对应的连接名即可正常使用:
@InjectRepository(Reason, 'db1') private reasonRepo: Repository<Reason>, @InjectRepository(Order, 'db2') private orderRepo: Repository<Order>,
注意:多独立连接场景下不要在实体上声明database属性,否则会覆盖连接配置中的database参数,导致库路由错误。
内容的提问来源于stack exchange,提问作者mjp-codes
相关产品推荐
相关产品推荐

