8

web.xmlで定義されている環境変数を読み取る必要があります

<env-entry>
    <description>Path Repositorio NFS</description>
    <env-entry-name>PATH_ENV</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>C:/V3</env-entry-value>
</env-entry>

私からapplicationContext.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="${PATH_ENV}/myprop.properties" />
</bean>

これどうやってするの ?


最後に私は次のことをしました:

1context.xmlで環境変数を定義します。

<Environment name="PATH_ENV" type="java.lang.String"/>

2web.xmlでenv-entryを定義します

<env-entry>
    <description>Path Repositorio NFS</description>
    <env-entry-name>PATH_ENV</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>/WEB-INF/</env-entry-value>
  </env-entry>

3applicationContext.xmlで定義します

<bean id="configurationPath" class="org.springframework.jndi.JndiObjectFactoryBean">  
    <property name="jndiName">  
        <value>java:comp/env/PATH_ENV</value>  
    </property>  
</bean>  

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location">
            <bean factory-bean="configurationPath" factory-method="concat">
                <constructor-arg value="myprop.properties"/>
            </bean>
        </property>
    </bean>

これは正しく実行されますが、次の場所でフルパスを定義すると、次のようになります。

<env-entry-value>C:/V3/</env-entry-value>

次の問題があります:

java.io.FileNotFoundException: Could not open ServletContext resource [/C:/V3/aesantasa.properties]

env-entry-valueでフルパスを定義できないのはなぜですか?

4

4 に答える 4

4

JndiObjectFactoryBean または を使用して、JNDI エントリ (環境エントリとリソースの両方) を検索できます<jee:jndi-lookup>

<jee:jndi-lookup id="PATH_ENV" jndi-name="PATH_ENV"/>

( jee 名前空間を使用するには、それを宣言する必要があります)。

これは、環境エントリで構成されたパスを (文字列として) 含む "PATH_ENV" という名前の Spring Bean を定義します。他の Bean に注入できるようになりました。

<bean class="xy.Foo">
    <property name="path" ref="PATH_ENV"/>
</bean>

残りの難しさは、文字列を連結することです。(残念ながら、プレースホルダーを JNDI 環境エントリに置き換える JndiPlaceholderConfigurer はないため、${property}/foo構文を使用して連結することはできず、さらに別の Bean 定義を提供する必要があります。

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <bean factory-bean="PATH_ENV" factory-method="concat">
            <constructor-arg>/myprop.properties</constructor-arg>
        </bean>
    </property>
</bean>

(Spring プロジェクトを手元に持っていないため、コードはテストされていません)

于 2012-09-13T09:46:23.867 に答える
0

あなたは使うことができますcontext-param、それはうまくいくでしょう。

<context-param>
    <param-name>PATH_ENV</param-name>
    <param-value>C:/V3</param-value>
</context-param>
于 2012-09-12T15:41:17.243 に答える
0

以下を使用しないのはなぜですか?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="file:C:/V3/myprop.properties"/>
</bean>
于 2012-09-13T10:10:01.187 に答える
-1

私は何かを解決したと思います。

パスの変更部分を使用して Windows システム変数を作成します。

my computer --> advanced options --> environment options --> Systeme Variable

そして、これで、次のように Spring AppContext のパスを完成させます。

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

   <property name="locations">  
       <list>
              <value>file:${PARENT_PATH}/conf/dev/jdbc.properties</value>
       <list>           
   </property>
</bean>

本当に役立つかどうかはわかりませんが、私にとってはうまくいきます

于 2012-09-13T17:02:13.313 に答える