2016-04-06 9 views
0

私は複数のデータベースに接続している春の休止状態のプロジェクトで作業しています。これらのデータベースの詳細はプロパティファイルにロードされ、hibernate.xmlファイルにインポートされます。各キーは以下のようにマッピングされています。以下のように休止状態の設定ファイルにelse condtionを追加する方法

DBNAME = DBHOST

マッピング:

<bean id="dbId" parent="abstractDataSource"> 
     <property name="url" value="${dbName}" /> 
</bean> 

しかし、今、私は、プロパティのキーは、例えば

以下のような複数の値にマッピングするように条件を含める必要がdbName = statusFlag、dbHost、dbBackupHostName

keyNameを使用して対応する値を取得し、カンマで区切って分割するように、休止状態の構成ファイルを変更する必要があります。 次にstatusFlagを確認する必要があります。それが真であれば、dbValueを 'dbHost'に設定する必要があります。そうでない場合は、フラグがfalseの場合は 'dbBackupHostName'に設定する必要があります。

この状態チェックをハイバネート設定ファイルに実装する方法を教えてください。

また、このアプローチが進んでも問題ないのであれば教えてください。 いくつかの旅行の一番の答えを待っている...

~~~スリヤ

+0

どの春バージョンをお使いですか? – 11thdimension

+0

@ 11thdension - 私は春3.0.5バージョン –

+0

を使用しているので、ステップをバックアップします。 1つのBeanに対して3つの異なるデータベース名が必要ですか? @マコノ - no。 – Makoto

答えて

0

あなたはJava Configuration

を使用することができますそれは3.サンプルの擬似コードは、春のために働く必要があり、春に豆の配線と作成に複雑なロジックを使用するには以下。

@Configuration 
public class MyCustomConfig { 
    @Value 
    String statusFlag; 
    @Value 
    String dbHost; 
    @Value 
    String dbBackupHostName; 

    @Bean 
    public BasicDataSource datasource() { 
     BasicDataSource datasource = new BasicDataSource(); 
     //Do some custom processing to create datasource 
     ... 
     return datasource;//return after creation 
    } 
} 

使用PropertyPlaceholderConfigurer@PropertySourceは3.0.5で使用できないような特性をロードします。あなたは大きな違いを作るべきではありません3.1に春のバージョンを変更することができる場合

あなたは@PropertySourceとともに@Profileを使用することができます。 ロジックが複雑すぎず、一度にアクティブでなければならない一連のプロパティを分離することができます。 (Local db、Dev db、Prod db、Customなど)@Profileを試してみてください。

@Profileアノテーション付きBeanは、そのプロファイルがアクティブな場合にのみ作成されます。プロファイルは、spring.profiles.activeに設定することで有効にすることができます。だから我々は、プロパティで設定することができますDevのプロファイルは以下

spring.profiles.active=dev 
//activating 2 profiles 
spring.profiles.active=dev,mvc 

をファイル有効にする

は、サンプルの擬似コードです。

@Configuration 
@PropertySource("bootstrap.properties")//set spring.profiles.active in it 
public class MyCustomConfig { 
    @Profile("profile1") 
    public BasicDataSource datasource1() { 
     //config using ${profile1.dbName} etc 
     ... 
    } 

    @Profile("profile2") 
    public BasicDataSource datasource2() { 
     //config using ${profile2.dbName} etc 
     ... 
    } 

    @Profile("profile3") 
    public BasicDataSource datasource3() { 
     //config using ${profile3.dbName} etc 
     ... 
    } 
} 
+0

あなたの提案におかげでBeanを設定する必要があります。私は同じものを試し、それが動作すれば更新する –