私は顧客IDに基づいて分割された複数のMySQL DBを持っています。シャード情報(顧客IDはどのDBに属しているか)に関する詳細を提供するマイクロサービスがあります。Spring - Hibernate - 複数のデータベースを動的に設定する
はこれまでのところ、私のコードは、単一のデータソースで働いていたと私は、Hibernate設定ファイルの一部としてのSessionFactoryを提供機能を持っている:私は
@Bean
public DataSource dataSource() {
}
:
@Bean
public LocalSessionFactoryBean sessionFactory() {
// set data source here
}
データソースがで返されますDAOのsessionFactoryをオートワイヤリングしています:
@Autowired
private SessionFactory sessionFactory;
ここで、複数のd atasourceは、私が行う必要があります。microservice
- 読み取り設定されたデータベースは、動的に
- のSessionFactoryは、顧客IDに基づいて動的にcratedれるべきデータソースを作成するには、DBのリストを使用します。
カスタマーIDに基づいてデータソースを初期化するようにsessionFactoryをオートワイヤリングする方法がわかりません。
ここのヘルプは本当に感謝しています。
動的にはどういう意味ですか? Springはアプリケーションの起動時にBeanを設定するため、2番目のデータソースを挿入することはできません。他の春のスコープを指定した場合、SessionFactoryを動的に作成すると拡張できません。これらのオブジェクトは、起動時に作成する必要があります。 –
修飾子で構成されたseprate Beanを持つことができ、そのうちの1つをプライマリにすることができます。最初のリクエストで必要です。 –
データベースに関する情報は静的ではありません。この情報は、構成されているすべてのシャードされたデータベースを一覧表示する別のマイクロサービスによって提供されます。データベースは、それを管理しているマイクロサービスで追加または削除することができます。 新しい顧客IDを追加する必要がある場合、そのIDに対応するすべてのデータが個別のdbインスタンスとして追加され、マイクロサービスは新しく追加されたdbを使用してdbsの配列を返します。 – agarwalankur85