2016-05-26 16 views
3

私はかなり複雑なSpring起動アプリケーション(Spring MVCとセキュリティを含む)を持っていますが、とりわけデータベース構成(URL、ユーザー名とパスワード)が必要です。SpringブートアプリケーションでのオンザフライDB再構成

  1. ユーザーが何のDBの構成を有していないアプリケーションを起動まだ
  2. アプリケーションは、DBの設定の不在に気づい:要件は、エンドユーザーは次のように、アプリケーション自体の助けを借りて、DBを設定できるようにすることですそして、設定画面を持つユーザーは
  3. ユーザーが
  4. アプリケーションは、明らかな問題は、私はすべてのBEAを作成することができないということである。このDB

を使用して起動し、URLと認証情報を入力する提示その構成がわかるまでDB構成を必要とするDataSourceが必要です。

最初の設定ステップが実行されるまで、アプリケーションのBeanの大部分の初期化を延期する方法はありますか?

- アップデート - アプリケーションのBeanのいくつかは、@PostConsutrctメソッドでDBから状態を初期化します。ですから、私は本当に作成を遅らせるか、設定が提供された後にアプリケーションコンテキスト内のすべてのBeanを(潜在的に)リフレッシュする方法を持つ必要があります。

+0

これは非常に興味深いようです... [Spring - Bean Post Processors](http://www.tutorialspring.com/spring/spring_bean_post_processors.htm)を見たことがあります – KLajdPaja

+0

はい、あります。しかし、ここでその使い方を見ることはできません – Nikem

+0

これがうまくいくかどうかわかりませんが、起動時に基本的にダミーの実装である独自のバージョンのDataSourceを実装できます。適切なデータベース資格情報が入力されたら、ApplicationContext内のDataSourceを変更してください。 – hooknc

答えて

1

私はあなたが(有用である可能性があなたのapplication.propertiesファイルにこの情報を保存し、別のモジュール/プログラムやデータベースなどのすべての詳細情報などを提供するために頼む簡単なスクリプトを持っていることについて考えることをお勧め外部化された構成Spring boot external configuration)、データソースに関する既に利用可能な情報でメインプログラムを起動します。これは少し簡単なアプローチかもしれません。

0

Spring Application Contextの作成時には、おそらく予想通り、javax.sql.DataSourceのインスタンスが必要です。

私は、Springのorg.springframework.jdbc.datasource.DelegatingDataSourceをサブクラス化し、afterPropertiesSetを空のメソッドでオーバーライドすることをお勧めします(データソースを指定していない場合、デフォルトの実装ではエラーが発生します)。ユーザーがdbを選択するために必要な詳細を入力すると、後で最終データソースをDelegatingDataSourceに注入することができます。

出典:https://github.com/spring-projects/spring-framework/blob/master/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DelegatingDataSource.java

+0

私はなぜ私はやや懐疑的ないくつかの説明を、追加しています。しかし、私はそれを試してみましょう。 – Nikem

+1

lenach87が上記のようにコメントしたので、このように春と戦う代わりに、2つの別々のアプリケーションを持つ方がよいかもしれません。 1つはデータベース情報を取得し、もう1つはデータベース情報を使用します。一貫性のある状態で実行されている2つのアプリケーションが、壊れた状態から開始するよりも優れています。 – gogstad

関連する問題