2

私はSpringが初めてで、次のシナリオを処理する最良の方法を見つけようとしています:

ローカルでの開発とテストのために、すべての構成値がプロパティ ファイルから取得されるアプリケーションがあります。アプリがアプリケーション サーバー (この場合は Websphere) にデプロイされるとき、プロパティ ファイルの代わりに JNDI リソース プロパティを使用します。

春にこれを処理する受け入れられた方法はありますか? Spring 以外のアプリケーションの場合、古き良きファクトリー パターンを使用してこのようなことを行い、構成ソースを決定したと思われます。Spring の場合、環境ごとに異なるコンテキスト XML ファイルを使用する例 (乱雑に聞こえます) や、Spring の「プロファイル」を利用する例を見てきました。

このシナリオで一般的に受け入れられている方法はありますか?

4

3 に答える 3

2

Spring プロファイルはかなり新しく、問題に正確に対処するために追加されました。さらに、言及したさまざまなコンテキスト XML ファイルなど、他のすべての回避策を廃止する必要があります。

完全を期すために、ここに例を示します。

<beans profile="test">
  <context:property-placeholder location="/foo/bar/buzz.properties" />
</beans>
<beans profile="prd">
  <jee:jndi-lookup id="properties" jndi-name="foo/bar/name"/>
</beans>

展開/起動時に選択したプロファイルに応じて、上記の Bean の 1 つだけがインスタンス化されます。


私が試したことはありませんが、あなたのケースに合うと思われる別のアプローチは、名前空間のdefault-value属性です:jee

<jee:jndi-lookup id="properties" jndi-name="foo/bar/name" resource-ref="true"
        default-value="classpath:foo.properties"/>

ただし、これが役立つかどうかはわかりません。

于 2013-01-12T20:30:03.070 に答える
1

Spring 3.1 を想定して、Tomasz が提案したようなプロファイルを使用してみてください。ただし、本番用に個々の JNDI 値を設定する代わりに、

<beans profile="prd">
  <context:property-placeholder/>
</beans>   

Spring 3.1 では、ContextLoaderListener は明らかにデフォルトで JNDI props を PropertySource としてプルするため、値にアクセスする必要がある場合、property-placeholder を使用すると、applicationContext.xml または @Value アノテーションで ${some/jndi/name} を使用できます。 .

Web アプリケーションが JNDI から値を取得できるようにするには、以下を追加します。

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>prd</param-value>
</context-param>

web.xml に。

テストで、システム プロパティ 'spring.profiles.active' を 'test' に設定すると、props ファイルから値が取得されます。

于 2013-01-13T19:18:52.487 に答える
0

1 つの方法は、ローカルの開発とテストにも jndi を使用することです。同じ jndi 名を定義できます。テストサーバーが何であるかわかりません。実際には、jetty と maven-jetty プラグインを使用してテストします。軽量で、IDE から実行できます。

別の方法は、あなたが質問で言ったことのようなものです。Spring プロファイルを利用する。次に、同じ id/name を持つ異なる transactionManager Bean を宣言できます。もちろん、それらは異なるプロファイルにある必要があります。実行時に、どのプロファイルをアクティブにするか、つまりどの Bean を使用するかを決定できます。

于 2013-01-12T20:31:28.413 に答える