2009-08-11 12 views
1

私はアプリケーションをできるだけ「動的」なものにするためにPropertyPlaceholderConfigurerを使用している大規模なユーザーです。ほとんどすべての定数はそのように定義されています。とにかく、私は現在、デフォルトのWARと共に出荷されるdefault.propertiesを定義しています。WebSphereとPropertyPlaceholderConfigurer

他の環境(受諾/生産)では、設定を上書きする必要があります。私はこれを次のようにしています:

<bean id="propertyManager" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:com/company/default.properties</value> 
       <value>file:${COMPANY_PROPERTIES_LOCATION}\kbo-select-settings.properties</value> 
      </list> 
     </property> 
    </bean> 

これは私が各環境にプロモーションビルドを使用できることを意味します。

私は、WebSphere内から自分のプロパティーを変更できないという事実を嫌います。代わりに、私は各サーバー(私たちは8つのクラスタ化している)に移動し、それに応じてプロパティを変更する必要があります。 WebSphereの中からそれらを変更して後で再起動することができれば、もっとユーザーフレンドリーになるでしょう...

誰かがこのような促進的なビルドをどうやってできるのか考えていますか?私はすでにデータソース/ Javaメール/ etcのJNDI設定を定義しています。

ありがとうございます!

答えて

2

各環境(local、dev、int、tst ...)のプロパティファイルの拡張子を使用してこの問題を解決し、各ファイルにはこれらの環境の特定の値が含まれていました。追加する必要があるのは、-Druntime.env = Xを設定するためのサーバー上のVM引数だけです。

あなたの設定ファイルのあなたの検索はその後、もちろんこの

<bean id="propertyManager" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:com/company/default.properties.${runtime.env}</value> 
      <value>file:${COMPANY_PROPERTIES_LOCATION}\kbo-select-settings.properties</value> 
     </list> 
    </property> 
</bean> 

のようになります。これだけで、それはあなたがかなり静的な環境を持っている場合、それはまだ実行時にそれを変更するには向いていないと、動作しますが、アプリケーションの宣伝を簡単にすることができます。アプリケーションを再デプロイせずに値を変更できるようにするには、アプリケーションの外に保存する必要があります。これは既にのkbo-select-settings.propertiesのために行っているようです。

0

設定がEARファイルにある場合、私はバックドアの詐欺やアプリの再配布なしで変更を伝える簡単な方法がないことを知っています。

私は、アプリを宣伝するときに変更される設定は、であるべきだと考えています。

一つのアプローチは、

ノート、キーBotzum氏によるhereを説明していることができます標準のWebSphere同期を使用してノードへの任意の特定のアプリケーションうちの一部ではない、実際にpropogateファイル。

もう1つの方法は、configにデータベースを使用することです。最近のDB2のようなDBへのXMLのpoppinはあまり難しくありません。

0

あなたの設定ファイルをあなたのWebsphereサーバーに指し示すURLリソースを探し、それをあなたのアプリケーションで調べることは実行可能な方法です。次に、すべての設定ファイルが管理されている中央の場所を指すようにURLを設定できます.SVNを使用していて、svnに読み取り専用アクセス権がある場合は、svn(http経由)から直接読み取ることもできます。

春にはいくつかの機能が組み込まれており、さまざまな設定ファイルの優先順位を付けることもできます。

は詳細についてはhow-to-differentiate-between-test-and-production-properties-in-an-application

0

私は、これはJVMの上でプロパティ値を使用しますが、その後cluserあるいは細胞レベルで定義されたのWebSphere変数にそれらを参照することであると扱っている方法を見てみましょう。その後、

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" /> 

そして、次のようにのようなものが変数を参照ください:次に

<bean id="id" class="com.blah.class"> 
     <property name="value1" value="${param1}" /> 
</bean> 

内たとえば、あなたが春の構成でPARAM1に設定をvalue1と呼ばれる値では、次の操作を行いますしたいと言います

/** 
    * @see org.springframework.test.AbstractSingleSpringContextTests#prepareApplicationContext(org.springframework.context.support.GenericApplicationContext) 
    */ 
    @Override 
    protected void prepareApplicationContext(GenericApplicationContext context) { 
     System.setProperty("param1", "myvalue"); 
     } 

を次にWebSphere構成の中から、あなたはJVMの変数を作成し、WebSphereにリンクしている場合:あなたは次のようにセットアップあなたのテストすることができ、あなたのテストWebSphere変数を変更するだけで、各マシン上のすべてのJVM変数が自動的に更新されます。 $ {webspherevar.param1}

の値で

のparam1

そして呼ばれるのWebSphere変数を作成します:

webspherevar、これを行うと呼ばれるJVM変数を作成するには

.param1

これには、値を入れておく必要があります。これにより、各環境の値を出荷する必要がなくなり、代わりに環境にロードして使用することができます。

こちらがお役に立てば幸いです。

1

潜在的な問題は、プロパティファイルの場所をハードコーディングしていることです。

<!-- try to lookup the configuration from a URL, if that doesn't work, fall back to the properties on the classpath --> 
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <bean class="org.springframework.core.io.UrlResource"> 
      <constructor-arg> 
       <jee:jndi-lookup 
        jndi-name="url/config" 
        default-value="file:///tmp" /> <!-- dummy default value ensures that the URL lookup doesn't fall over if the JNDI resource isn't defined --> 
      </constructor-arg> 
     </bean> 
    </property> 
    <property name="properties"> 
     <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
      <property name="locations"> 
       <list> 
        <value>classpath:com/company/default.properties</value> 
       </list> 
      </property> 
     </bean> 
    </property> 
    <property name="ignoreResourceNotFound" value="true"/> 
</bean> 

あなたはリソースのWASコンソールを使用して異なる環境に異なるファイル名を指定することができますこの方法> URL:あなたは、JNDIリソースとしてファイルをクラスパスに指定されたデフォルト値にフォールバックプロパティの場所を指定することができ> url/configというJNDI名を持つリソースを作成し、正しいファイル(file:/// your/path/to/properties)を指すようにしてください。

別の解決策として、コンソールから個々のプロパティを管理する場合、PropertyPlaceholderConfigurerを使用する代わりに、jee:jndi-lookupを使用してweb.xmlのenv-entries(管理できるWASコンソールを使用して)。 this answer

関連する問題