🐕
【NestJS】@InjectDataSourceとは
@InjectDataSourceとは
TypeORMを使用する際にデータソース(DataSourceオブジェクト)を依存性注入するためのデコレータです。
このデコレータはアプリケーション内の複数のデータソースを扱う際に利用されます。
主な機能
① データソースの特定
注入したい特定のデータソースを識別するために使用されます。
デフォルトのデータ素オースではなく、名前つきのデータソースを注入する場合に便利です。
② TypeORMの統合
TypeORMで構成されたデータソースを、クラス内で簡単に利用できるようにします。
実装例
constructor(
private readonly dataSource: DataSource, // デフォルトのデータソース
@InjectDataSource('tsdb') // 名前付きデータソース
private readonly tsdbDataSource: DataSource,
) {
super();
}
実際にデータベース名はどこで定義しているのか疑問に思ったので調べてみました。
下記の通りでTypeOrmModule.forRootAxyncのnameが'tsdb'のDBを操作したい場合は、@InjectDataSource('tsdb')でデータソースの名前を指定する必要があるようです。
TypeOrmModule.forRootAxync({
name: 'tsdb', // データベース名
type: 'mysql', // データベースの種類
host: 'localhost',
port: 3010,
username: 'username',
password: 'password',
database: 'tsdb_database', // 実際のデータベース名
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
synchronize: true,
})
Discussion