2012-08-08 3 views
26

多くのJavaアプリケーションはmavenでビルドされています。 MavenにはProfilesコンセプトがあり、さまざまな環境のリリースパッケージを構築するのにはとても便利です。例えばdev/test/prod different with path/jndiname/security rule/properties files ...私はそれを説明するためにここにコードを記載する必要はないと思う。メイプルプロファイルまたはスプリングプロファイル?

SpringはJava開発のための非常に素晴らしく人気のあるフレームワークです。これはspring3以降もプロファイルの概念をサポートしています。

ここで、ENVの目的を異にする方が良いでしょうか?今私はmavenの方が好きです。春は各プロファイルの各Bean定義をコピーする必要があるからです。どのプロファイルをアクティブにするかをspringに知らせるためには、イニシャライザ/プロパティが必要です。

しかし、私は春のプロファイルがMavenのプロファイルよりも柔軟であると感じています。

あなたはどう思いますか?いくつかのアドバイスをお願いします。ありがとうございました。

答えて

30

Mavenプロファイルはビルドタイムソリューションを提供し、SpringFrameworkプロファイルはランタイムの代替手段を提供します。私はこれが最初の質問であると思うかもしれないと思います。異なる環境に展開できる単一のパッケージを用意したい場合や、ビルドツールが目的の環境に応じて異なるパッケージを提供したい場合です。

異なるサーバーが異なるサーバーに展開されている場合は、多くの疑問が生じることがあります。たとえば、私の職場では、以前に運用環境で発生したバグを修正するためにパッケージを配備している場合、企業ポリシーでは、QAと運用サーバーで同じソリューションパッケージを使用できるという唯一のシナリオがあると述べています。

5

異なるアーティファクトが必要な場合は、mavenに移動します。アーチファクトが構築された後に設定できる実際の設定であれば、ユーザのSpringプロファイルをビルドします。

0

私はそれがあなたの要件に依存すると思います。環境(つまり、jdbcドライバなど)に基づいて依存関係が異なる場合は、これを整理するためにmavenを使いたいでしょう。

デプロイメントを設定するだけの場合は、おそらくバネを使用するほうがよいでしょう。

6

他の回答で述べたように:

  • :それはすべてあなたが

    私たちはMavenを使用して、最後の年にして上がってきた今、春3.1のプロファイルはこれです:)どのように動作するかに依存しますリリースをカットするにはmaven-release-pluginを使用します。これは、すべてのMavenプロファイルでリリースまたは少なくともタグを再構築する必要があるため、環境に問題が発生します。

  • すべての環境で.warファイルを作成し、春PropertyPlaceholderConfigurerを使用してアプリケーションをセットアップします(または顧客に応じたJNDIリソース)。これにより、1つのMavenリリースのみを実行できます。
  • スプリングプロファイルは、環境が異なる場合にも発生します。たとえば、すべての環境で利用できない認証サービスです。ここでそのサービスをスタブして、それを春のプロファイルに入れます。とにかく私たちが使用するPropertyPlaceholderConfigurerによって読み取られるプロパティの中の春のプロファイルをアクティブにします。

それを行う方法についての周りにいくつかの素晴らしいチュートリアルがあります。

は、我々は通常のみのために異なる部分にビルドを分割するのmavenプロファイルを使用開発者と継続的な統合ビルド。実際に.warファイルに対してターゲット環境用にこれらのファイルを使用していません。 私たちは引き続きWebアプリケーション(データ量、テストデータなど)と比較して異なる自動データベースデプロイメントのためにmavenプロファイルを使用しますが、これらはzipなどでは提供されません。

確かに他の方法があります。私は物語の終わりとは思っていません:)

しかし、それは役に立つかもしれません。

2

私は、どのMavenプロファイルがアクティブ化されたかに応じて、システムプロパティを設定するために、properties-maven-pluginを使用しました。次に、春には、システムプロパティに応じて、私が望むプロファイルをプログラムでアクティブ化していました。

文字列activeProfile = System.getProperty( "myapp.profile");

appContext.getEnvironment()setActiveProfiles(...)I直接プロファイル(達人/スプリング)の二種類をリンクしたかった場合

はまた、私はspring.profiles.activeプロパティを設定しました。 mavenプラグインを介して。

デザインでは練習が間違っている可能性がありますが、問題を解決しました。

+1

私が探していたもの、やっぱり! – Vinicius

関連する問題