36

多くのJavaアプリケーションはMavenでビルドされています。Mavenにはプロファイルの概念があり、さまざまな環境向けのリリースパッケージを構築すると非常に便利です。たとえばdev/test/prod、異なるものを使用していpath / jndiname / security rule / properties filesます...私はそれを説明するためにここにコードをリストする必要はないと思います。

Spring3はプロファイルの概念もサポートしているため、SpringはJava開発にとって非常に優れた人気のあるフレームワークです。

ここで、さまざまなENVの目的にリリースするために、どちらが優れているかという質問があります。今はMavenプロファイルが好きです。春は各プロファイルの各Bean定義をコピーする必要があるためです。また、どのプロファイルをアクティブにする必要があるかをSpringに通知するための初期化子/プロパティが必要です。

しかし、SpringプロファイルはMavenプロファイルよりも柔軟だと思います。

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

4

5 に答える 5

41

Mavenプロファイルはビルド時のソリューションを提供し、SpringFrameworkプロファイルはランタイムの代替手段を提供します。これは、自分自身に問いかける最初の質問だと思います。さまざまな環境にデプロイできる単一のパッケージが必要なのか、それともビルドツールが移行先の環境に応じてさまざまなパッケージを提供するのか。

覚えておくべきことの1つは、異なるサーバーに異なるパッケージを展開している場合、多くの質問が発生する可能性があるということです。たとえば、私の職場では、以前に本番環境で発生したバグを修正するためにパッケージを展開する場合、会社のポリシーでは、QAと本番サーバーに同じソリューションパッケージを使用することが唯一の許容可能なシナリオであると規定されています。

于 2012-08-08T16:51:47.543 に答える
7

別のアーティファクトが必要な場合は、Mavenを使用してください。アーティファクトのビルド後に構成できる実際の構成である場合は、ユーザーのSpringプロファイルを使用します。

于 2012-08-08T16:47:06.710 に答える
6

他の返信で述べたように:それはすべてあなたがどのように働くかに依存します:)

過去数年間にMavenを使用して思いついたのは、今では春の3.1プロファイルです。

  • maven-release-pluginを使用してリリースをカットします。これにより、リリースを再構築するか、少なくともすべてのMavenプロファイルでタグを再構築する必要があるため、Mavenプロファイルを使用する場合に環境に問題が発生します。
  • そのため、すべての環境用に.warファイルを作成し、Springを使用しPropertyPlaceholderConfigurerてアプリケーション(または顧客によってはJNDIリソース)をセットアップします。これにより、Mavenリリースを1つだけ実行できます。
  • スプリングプロファイルは、環境が異なる場合にも使用されます。たとえば、すべての環境で利用できるわけではない認証サービス。ここでは、そのサービスをスタブし、スプリングプロファイルに配置します。PropertyPlaceholderConfigurerとにかく使用するプロパティでスプリングプロファイルをアクティブにします。

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

通常、Mavenプロファイルを使用して、開発者向けのビルドと継続的インテグレーションビルドを異なる部分に分割します。.warファイルのターゲット環境では実際には使用しなくなりました。自動データベース展開には引き続きMavenプロファイルを使用します。これは、Webアプリ(データの量、テストデータなど)とは大きく異なりますが、zipなどとしては提供されません。

確かに他の方法があります。私はそれが物語の終わりだとは思わない:)

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

于 2012-08-08T17:07:44.323 に答える
2

たまたまproperties-maven-pluginを使用して、アクティブ化されたMavenプロファイルに応じてシステムプロパティを設定しました。次に、春に、システムプロパティに応じて、必要なプロファイルをプログラムでアクティブ化しました。

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

appContext.getEnvironment()。setActiveProfiles(....)

さらに、2種類のプロファイル(maven / spring)を直接リンクしたい場合は、mavenプラグインを介してspring.profiles.activeプロパティを設定していました。

それらの慣行はおそらく設計において間違っていますが、それらは私の問題を解決しました。

于 2014-11-26T02:19:15.297 に答える
0

要件にもよると思います。環境(jdbcドライバーなど)に基づいて異なる依存関係がある場合は、mavenを使用してこれを整理することをお勧めします。

デプロイメントを構成するだけの場合は、Springを使用したほうがよいでしょう。

于 2012-08-08T16:48:07.217 に答える