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>

我怎样才能做到这一点 ?


最后我做了下一个:

1 在 context.xml 中定义环境变量:

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

2 在 web.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>

3 在applicationContext.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>

剩下的困难是连接字符串。(不幸的是,没有 JndiPlaceholderConfigurer 可以用 JNDI 环境条目替换占位符,因此您不能使用该${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 回答