2

実行したいプロファイルを指定できるアプリケーションがあります。しかし、これらのプロファイルを資格情報、アプリケーションのパフォーマンス、メモリ印刷、アプリケーションの動作などにグループ化したいとも考えています。次のプロファイルを実行できます

-Dspring.profiles.active=production,cached-local,db-connection-pooled...

しかし、私はそれを次のように初期化することを好みます

-Dspring.profiles.active=production,super-fast
#the above activates method level caches, db connection pooling etc
#super-fast triggered activation of cached-local, db-connection-pooled profiles

また

-Dspring.profiles.active=dev,low-footprint
#the above dosent enable caching, or db connection pooling

これは、 How to set active spring 3.1 environment profile via a propertyes file and not via an env variable or system property のようなカスタム コードを記述せずに実現でき ます。これらをプロパティ ファイルから、または spring-xml 構成内でロードできても問題ありません。spring 3.1 で xml のみの構成を使用しています。

4

1 に答える 1

0

でアクティブなプロファイルを操作するカスタムコードなしでこれを達成する方法はわかりませんConfigurableEnvironment

セキュリティ フレームワークで権限対ロール (権限のグループ) と同じ間接パターンを実現しようとしていますが、これはすぐに使用できるわけではないため、回避する必要がありました。

私は自分のプロファイルを一般的なものにしました。たとえば、あなたの場合はプロダクションや超高速で、それらのプロファイルに敏感な各 Bean に対して、正しい @Profile を設定しました。リファクタリングを容易にするために、2 つの手法を使用しました。

  1. プロファイルごとにメタアノテーションを作成し (例: @Production)、@SuperFastプロファイル名を公開定数にします (例: ) Production.PROFILE_NAME = "production"
  2. 任意の Bean のプロファイルをマークするとき、新しいメタアノテーションが 1 つのプロファイルにのみ適用される@Profile({Production.PROFILE_NAME, ...})場合はそれを使用し、複数のプロファイルに適用される場合はそれを使用します。少なくとも 4.0 までは、2 つのプロファイル メタアノテーションを同じ Bean に適用できないため、これを行う必要があります。

例えば、

@Profile(Production.PROFILE_NAME)
public @interface Production {

    public static String PROFILE_NAME = "production";
}

これらすべてのポイントは、IDE を使用して、どの Bean が取り込まれているかをすばやく理解したり変更したりする必要がある@Productionかどうかを調べることができるようになったことです。Production.PROFILE_NAME

于 2013-10-27T10:32:51.500 に答える