2017-04-21 17 views
0

OpenJPAでSpringbootアプリケーションを作成しています。SpringBootでデータソースを動的に作成するOpenJPAアプリケーション(OpenJPAでマルチテナントを実装する)

私の要件は、複数のデータソースに動的に接続する必要があり、実行時にいくつかの残りのエンドポイントを呼び出すことによってデータソースの資格情報が取得されることです。ここで

は、コントローラクラスです:

@RestController 
public class StationController { 

@Autowired 
BasicDataSource dataSource; 

私は私の顧客名に依存jdbc_urlを返すサービスがあります。

public String getDSInfo(String customername){ 
    // code to get the datasource info (JDBC URL) 
} 

を私の質問は以下のとおりです。

  1. 実行時にデータソースの資格情報を取得することによってデータソースを作成する方法はありますか私の他のサービス(顧客IDを取り、顧客固有のデータソースを返す)?

  2. 私のアプリケーションはWebベースのアプリケーションなので、多くの顧客が同時にアクセスしますので、非常に多くの異なるデータソースを作成して処理する方法は?

注:

  1. コードが実行時にのみ、いくつかのサービスを焼成することにより、顧客固有のデータソースに関する情報を取得しますので、私はXML設定ファイル内のデータソースの資格情報をハードコーディングすることはできません。

  2. 私はHibernateでいくつかの実装を見つけましたが、私はOpenJPAでSpringbootを使用しています。 OpenJPA固有のヘルプが必要です。

答えて

0

マルチテナントソリューションが必要なようです。

データソースはプログラムで簡単に作成できます。中央ソース(例:セントラル設定データベースやSpringコンフィグサーバ)から接続情報を取り込んだDataSourceBuilderを使用するだけです。

次に、データソースをクライアントに戻すためにマルチテナントフレームワークを調べる必要があります。

はこちらをご覧ください:

https://www.youtube.com/watch?v=nBSHiUTHjWA

、ここ

https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part

ビデオが長い時計が、良いものです。基本的には、エンティティマネージャがマップからデータソースを取得できるようにする、顧客データソースのマップがあります。これは、スレッドスコープのカスタムスプリングスコープの「customer」です。このスコープは、特定の顧客のユーザーが何らかの方法でログインしたときに設定されます。あなたのアプリ。

+0

私にお試しください。このソリューションは、複数の顧客が同時にアプリケーションにアクセスする場合にも機能しますか? –

+0

はい、それは考えです。特定のカスタムはURLに顧客固有のコードを渡すことでアプリに到達することができます。ユーザーがログインすると、ローカルのスレッドに設定され、カスタムエンティティマネージャを使用してデータアクセスを行うと、エンティティマネージャは顧客のデータソースをマップから取得します。魔法は顧客のカスタムスコープの使用です。これはすべてビデオの最後の10〜15分で説明されています。 – PaulNUK

+0

リンクのおかげで、これらはSpringのOpenJPAアプリケーションにも同様に適用できますか? –

関連する問題