🐕

【NestJS】@InjectDataSourceとは

2024/12/03に公開

@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