2017-02-18 8 views
1

私はこれをしばらく検索してきました。@ beanの初期化の条件

これまでのところ、私はthisブログが非常に役に立ちましたが、私の問題を解決していませんでした。

私はflagが、私はそれがnull

ユースケースになりたいそうでない、真の場合のみ@Autowired Beanにしたい:DBの1がメンテナンス中である場合、私はしたくない

私のアプリは失敗する。私はautowirenull豆できないよう

@Bean("sqlDatabase") 
public Database getSqlDatabase(@Value("${datasource.sql.url}") String url, 
     @Value("${datasource.sql.username}") String username, @Value("${datasource.sql.password}") String password, 
     @Value("${datasource.poolsize.min}") int minPoolSize, @Value("${datasource.poolsize.max}") int maxPoolSize, 
     @Value("${database.enable-sql}") boolean isSqlEnabled) { 
    if (isSqlEnabled) 
     return Database.builder().url(url).pool(minPoolSize, maxPoolSize).username(username).password(password) 
       .build(); 
    else 
     return null; 
} 

さて、この場合には、そのエラーが投げ。

私は@Conditionalを使いたかったのですが、私の場合はちょっと複雑です。 3つのデータベースをすべて更新する必要があります。条件が満たされない場合、私はちょうどskipのいずれかにしたいです。

+0

*すでに3つのデータベースをすべて更新する必要があります。条件が満たされない場合は、そのうちの1つをスキップします。あなたはこれによって何を意味するのか詳しく説明できますか? – CKing

+0

私は3つのデータベースに触れるスプリングブートアプリケーションを持っています。私はそれらのために3種類の豆を作っています。メンテナンスのために、1つのデータベースをオフにしたいと思っています。私はまだ残りが必要です。2.ブログの例では。私の場合は実際には適用されません。私はちょうど私の初期化が接続しようとするタイムアウトでハングアップしないようにします。 –

答えて

1

プロファイルを使用できます。

ようにそのBeanを使用するために活性化されなければならないプロファイルでBeanクラスまたはBeanメソッドに注釈を付けるより

  • DB1
  • DB2
  • DB3

すべてのデータベースのためのプロファイル

@Profile("db1") 
@Bean("db1") 
public Database getSqlDatabase(...){...}  

@ProfileでアノテーションされたBeanは、アプリケーションを起動するとcr関連プロファイルがアクティブになっている場合

プロファイルを有効にするには、プロパティー 'spring.profiles.active'を設定します。あなたはプロパティファイルまたはコマンドラインパラメータとしてそのプロパティを設定することができます

spring.profiles.active=db1,db3 

:DB1とDB2を有効にするには 。

プロファイルは、同じプロファイルで多くの豆に注釈を付けることができます設定

  • であなたに
  • プロファイルで設定クラスに注釈を付けることができます春のコンテキストを変更するにはあなたに多くの柔軟性を与えることができます
  • プロファイル固有のプロパティファイルを使用する
  • 複数のプロファイルを1つの@Profileアノテーションで使用できます。論理 'または'が使用されるため、プロファイル 'db1'がアクティブであるか 'db2'がアクティブな場合、@Profile( "db1"、 "db2")で注釈が付けられたBeanが作成されます。
    • あなたは、独自のロジックを定義するために@Conditionalを使用することができ、他よりも「または」

注意していないしてください:あなたはコンポーネントのスキャンまたはXML構成を使用していない使用している場合、Beanクラスの注釈@Profileは何を持っています効果。 Beanメソッドに@Profileまたは構成クラス全体を注釈する必要があります。

+0

フィールドに注釈を付けるとどうなりますか?それがプロファイルを満たさない場合はnullになりますか? –

+0

と思っていたので、Beanを 'null 'としています。まさに私が必要なもの!私は残りの部分を処理することができます。どうもありがとう。私は不必要に多くのことを混乱させていた。 :) –

関連する問題