typeormのDataSouce周りを調べてみましたのでまとめます。
DataSourceの初期化はDataSourceインスタンスのinitializeメソッドを呼び出して行う。 DataSourceの生成でDBの設定をする。
例
const AppDataSource = new DataSource({
type:"mysql",
host:"localhost",
port:3300,
username:"hoge",
password:"hoge",
database:"hoge",
})
この設定はDBの種類で異なる。DataSourceOptionsとして型はまとめられている。 このオブジェクトはexportしておいてアプリ全体で共有する。
初期化
await AppDataSource.initialize().then(() => {
console.log("DB接続成功")
}).catch((err) => {
console.log("DB接続失敗", err)
})
getConnectionで接続を取得できる。
const connection = AppDataSource.getConnection()
- type: DBの種類
- extra: DBのDriverに渡すExtraオプション
- entities: Entityの配列
- subscribers: Subscriberの配列
- migrations: Migrationの配列
- logging: ログを出力するかどうか
- logger: ログを出力する際のロガーの種類
- maxQueryExecutionTime: 最大クエリ実行時間 これを越えるとログを出力する
- poolSize: プールサイズ activeな最大接続数
- namingStrategy: DBの命名規則
- entityPrefix: Entityの接頭辞
- entitySkipConstructor: DBから取得したEntityのコンストラクタを呼び出さない。
- dropSchema: DBのスキーマをDBの初期化の度に削除する。これは実働環境では使わない。そうしないと全データが消える。
- synchronize: DBのスキーマをEntityの定義に合わせて自動作成する。これは実働環境では使わない。そうしないと全データが消える。
- migrationsRun: migrationをアプリの起動毎に自動的に実行する。これを使用せずにmigrationを実行するにはmigration:runを使用する。
- migrationsTableName: migrationのテーブル名。実行されたmigrationの履歴を保存するテーブル名を指定する。
- migrationsTransactionMode: migrationの実行時のトランザクションモード。all | none | each でデフォルトはall
- metadateTableName: metadataのテーブル名。Entityのメタデータを保存するテーブル名を指定する。デフォルトはtypeorm_metadata
- cache: entityのresult cacheを有効にするかどうか(https://typeorm.io/caching#)
- cli. entitiesDir: cliでentityを生成する際のディレクトリ
- cli. subscribersDir: cliでsubscriberを生成する際のディレクトリ
- url
- host
- port デフォルトは3306
- username
- password
- database DB名
- charset 文字コード
- timezone タイムゾーン JSへのtypecastやDBへの保存時のタイムゾーンを指定する。デフォルトはlocal
- connectionTimeout 接続タイムアウト ミリ秒 デフォルトは10000
- aquierTimeout 接続取得タイムアウト TCP接続を取得するまでのタイムアウト。ミリ秒 デフォルトは10000
- insecureAuth パスワードの暗号化を無効にするかどうか。デフォルトはfalse
- supportBigNumbers bigintをサポートするかどうか。デフォルトはtrue
- bigNumberStrings bigintを文字列で受け取るかどうか。デフォルトはtrue
- dateStrings date(TIMESTAMP, DATETIME, DATE)を文字列で受け取るかどうか。デフォルトはfalse
- debug デバッグモードを有効にするかどうか。デフォルトはfalse 標準出力にプロトコルの詳細を出力するかどうかのtrue/false、または表示するパケットの種類を配列で指定する。
- trace Errorのときにスタックトレースを出力するかどうか。デフォルトはtrue。
- multipleStatements 1クエリで複数のmysql statementを実行するかどうか。デフォルトはfalse。trueの場合はsqlインジェクションの危険性がある。
- legacySpatialSupport GeomFromTextやAsTextを使用するかどうか。デフォルトはfalse。これらはMySQL 8で削除された。
- flags https://github.com/mysqljs/mysql#connection-flags
- ssl ssl パラメータもしくはsslプロファイルの名前を含む文字列を指定する。https://github.com/mysqljs/mysql#ssl-options
DataSourceのインスタンスを複数作成すれば良い。
Entityのデコレータに@Entity({ database: 'db1' })
のようにdatabaseを指定する。