1

@Configuration で注釈が付けられた複数のクラスがあり、コンテキストに登録するものを最上位の構成コンポーネントで決定したいと考えています。

@Configuration
public class FileSystemDataStoreConfiguration {
  public @Bean DataStore getDataStore() {
    return new FileSystemDataStore(withSomeConfigProperties);
  }
}

@Configuration
public class DatabaseDataStoreConfiguration {
  public @Bean DataStore getDataStore() {
    return new DatabaseDataStore(withSomeConfigProperties);
  }
}

@Configuration
public class DataStoreConfiguration {

  // Some arbitrary logic to decide whether I want to load
  // FileSystem or Database configuration.

}

@Profile を使用して複数の構成クラスから選択できることを理解しています。ただし、私はすでにプロファイルを使用して環境を区別しています。構成クラスの選択は、環境に依存しません。

ロードする構成クラスを実行時に選択するにはどうすればよいですか?

"Production, WithDatabase" のような複数のアクティブなプロファイルを持つことはできますか?

その場合、プロパティに基づいてプロファイルを追加するにはどうすればよいですか?

4

2 に答える 2

2

春だから色々な使い方ができる!

すべての注釈を残す場合は、 @ActiveProfiles 注釈を使用して、必要なプロファイルのセット全体を有効にすることができます。

@ActiveProfiles(profiles = ProfileDefinitions.MY_ENABLED_PROFILE)
@ContextConfiguration(as usual from here...)

「プロファイル」を使用すると、多くのプロファイルを設定できることがわかります。プロファイルを定数として保存する必要もありませんが、役立つ場合があります。

public class ProfileDefinitions {

    public static final String MY_ENABLED_PROFILE = "some-profile-enabled";

    // you can even make profiles derived from others:
    public static final String ACTIVE_WHEN_MY_IS_NOT = "!" + MY_ENABLED_PROFILE;
}

上記のすべてを使用して、プロファイルの動的設定に基づいてさまざまな構成を選択的に有効にすることができます。

@Profile(ProfileDefinitions.MY_ENABLED_PROFILE)
@Configuration
@Import({these will only be imported if the profile is active!})
public class DatabaseDataStoreConfiguration {
}

@Profile(ProfileDefinitions.ACTIVE_WHEN_MY_IS_NOT)
@Configuration
@Import({if any are necessary})
public class DataStoreConfiguration {
}
于 2014-03-18T13:11:58.600 に答える
2

Spring 4 を使用している場合は、新しい @Conditional アノテーション機能 (実際には @Profile を実装するために使用されるバックエンド) を使用できます。

于 2014-03-11T15:16:39.707 に答える