2010-11-19 20 views
4

特定のweb-appの複数の独立したコピーを、同じTomcatサーバー上に異なるコンテキストパスで展開したいと考えています。各Webアプリは異なる設定(データベース名、パスワードなど)を必要としますが、戦争を正確に同一に保ちたいと思います。コンテキストパスに基づく外部設定

私の計画では、起動時にコンテキストパスを見つけて、コンテキストパスで指定されたTomcatの外にある特定の.propertiesファイルを読み込む予定でした。たとえば、{tomcat path}/webapps/pineappleにwarがデプロイされている場合は、/config/pineapple.propertiesを読んでみたいと考えています。

私はServletContextのインスタンスをspring(3)を参照してください。しかし、私が今まで見てきたすべてのアドバイスは廃止されたServletContextFactoryBeanを使用しています。

コンテキストパスを取得するより良い方法がありますか、コンテキストパスに基づいて外部ファイルをロードする方法がありますか?

+0

なぜこのようにしたいのですか? – shsteimer

+0

私は、互いに独立した複数のユーザーによって使用されるアプリケーションを持っています。アプリケーションはすべてのユーザーで同じですが、唯一の違いはデータベース接続の特質です。私は、サーブレットコンテキストパス(または他の外部メタデータ)に基づいて適切な設定を見つける方法を知っている1つの戦争を構築するだけです。 – Keith

答えて

1
  1. DBを使用して値を取得するためにPropertyplaceholderconfigurerを拡張します。例here
  2. ロードウェブアプリのアプリのCTXが初期化されている場合は、プロパティは、DB
  3. から解決され
  4. シード・データの一部として、DBへの設定の実際の値(データベース名、パスワードなど)

これは私たちが従ってきたアプローチであり、素晴らしいことです。 Spring 3.1に切り替えることができるなら、それはEnvironment Profilesをサポートしています。

+0

サーブレットコンテキストパスがここでどのように参照されているのかわかりません。 2つの同一の戦争がサーブレットコンテキストパスに基づいて別個の設定ファイル/設定をロードするためには、私にはサーブレットコンテキストパスを読み取るものがなければならないと思われます。多分私は何かを欠いているでしょうか? – Keith

+0

私は何か関連するServletContextPropertyPlaceholderConfigurerを見つけました。サーブレットのコンテキストパスについて知っておくべきものでなければならないようだ...しかし、私は運がない。 – Keith

4

ServletContextAttributeFactoryBeanの助けを借りてと春EL、あなたがそのようなServletContext初期化パラメータ(web.xmlの<context-param>)を参照することができます。

#{contextAttributes.myKey} 

をこれは、あなたがPropertyPlaceHolderConfigurerを使用すると、任意のユーザからプロパティファイルを読み込むことができます-defined場所:

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="#{contextParameters.APP_HOME}/conf/app.properties"/> 
</bean> 

Tomcatののcontext.xmlでのServletContextのinitパラメータの対応する定義:

<Parameter name="APP_HOME" value="file:/test" override="false"/> 

またはあなたのアプリケーションのweb.xmlで:

<context-param> 
    <param-name>APP_HOME</param-name> 
    <param-value>file:/test</param-value> 
</context-param> 
+0

このようなものを探していた。ありがとうございました! –

4

はこれが解決策になるはずです。

<bean name="envConfig" class="EnvironmentConfiguration"> 
    <property name="locations"> 
    <list> 
     <value>file:///#{servletContext.contextPath}.properties</value> 
    </list> 
    </property> 
    <property name="ignoreUnresolvablePlaceholders" value="true" /> 
</bean> 
関連する問題