0

私は 2 つの別個の Java Web アプリを開発しています。A は Web サイト、B はバックエンド サービスです。両方とも、Tomcat を実行している別のマシンにデプロイされます。

A は REST 呼び出しを使用して B にアクセスします。

開発用、テスト用、および本番用に別々のマシンがあります。これら 2 つのアプリの開発、テスト、および運用環境での展開を管理するにはどうすればよいですか? アプリをデプロイする前に、Java コードと JavaScript コードの両方の URL を常に変更して、正しいサーバーを指すようにする必要があります。

考慮されるオプション: 1)ここで説明されているように、システム環境変数の使用を検討しました。これは Java 側では機能しますが、私の Web サイト A には、バックエンド サーバー B の REST API を呼び出す JavaScript コードがあります。JavaScript コードから Java レベルで定義された URL にアクセスする方法がわかりません。ありますか?

2) ビルド中に実際の URL に置き換えられるコード内の URL にプレースホルダーを使用します (ant?)。繰り返しますが、これが JavaScript コードで機能するかどうかはわかりません。

これは一般的な問題に違いありませんが、さらにグーグルで調べても、人々がこれを解決するために何をしているのかについての具体的なヒントは得られませんでした。ポインタに感謝します。

4

2 に答える 2

1

JavaScript ファイル内の API エンドポイント URL 文字列を置換するためのReplace タスクを含む単純な ant ビルドがあれば十分です。ビルド構成ファイルで dev、prod などの個別の構成設定を維持し、オプションとしてその構成を使用してビルドを起動できます。

JSファイルを最終的な展開先にコピーするときに、フィルタチェーンに関するこのSOの回答を見て、置換を行ってください。

JS ファイルで:

var APIURL = "@APIURL@";

置換操作の例を次に示します。

<!-- holds your API endpoints based on configuration parameter -->
<property file="${config}.properties" />
<!-- does the replacement -->
<copy src="/path_to_main_js_file" dest="/path_to_final_package_js_file"
   <filterchain>
     <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
       <param type="token" name="APIURL" value="${apiurl}"/>
     </filterreader>
   </filterchain>
 </copy>

例えば

ant -Dconfig=dev package

または、正しい構成ファイルを内部的にロードする開発、製品、ステージングに異なるターゲットを使用することもできます。

ant package-dev

Java 側で環境変数を使用するアプローチは、良いアプローチのようです。

于 2013-02-23T20:08:58.940 に答える
0

ZooKeeperは構成を管理するための優れた方法ですが、必要に応じてやり過ぎになる可能性があります。

あなたが言及したソリューションのように、ant を使用してビルド時に URL を生成することは、別の実行可能なソリューションです。私はこれ (および ZooKeeper) を直接使用しました。シンプルですが、欠点がないわけではありません。少なくとも、開発、テスト、および本番用に個別のビルドが必要であることを意味します。

個別のビルドを使用していない場合は、コードが実行されている環境への基本的なフックが必要になります。システム環境変数は、このためにうまく機能します。

Twelve-Factor AppConfig セクションは、あなたの質問に対する直接的な回答ではありませんが、読む価値があることは間違いありません。

于 2013-02-23T19:59:06.307 に答える