时间:2011-12-27 19:15:11

标签: spring java-ee jndi spring-ws spring-3

我真的被困在这一个......救命! :)

我正在使用j2ee:jndi查找属性文件。以下工作正常:

<bean class="org.springframework.core.io.FileSystemResource">
    <constructor-arg>
        <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true" />
    </constructor-arg>
</bean>

但是,我想处理jndi查找失败但会回到位于WEB-INF / classes文件夹中的默认文件的情况。如果我使用如下的default-value,webapp会抛出一个异常,抱怨它无法找到文件“classpath:myprops.properties”

<bean class="org.springframework.core.io.FileSystemResource">
    <constructor-arg>
        <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true"
            default-value="classpath:myprops.properties" />
    </constructor-arg>
</bean>

但是,如果我将特定路径硬编码为默认值,那么它可以正常工作,但作为最终解决方案,这是不可接受的。

因此,我的问题是如何使用“classpath:”以便正确解析?

这是我正在使用的整体用法:

<bean id="authServerProperties"
     class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="location">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg>
                <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true"
                    default-value="classpath:myprops.properties" />
            </constructor-arg>
        </bean>
     </property>
     .....
</bean> 

1 个答案:

答案 0 :(得分:1)

让Spring使用其内置的PropertyEditor支持来决定资源的类型,而不是提供显式的FileSystemResource bean,因为这不适用于类路径资源(需要配置它)在文件系统上有一个路径)。相反,你应该使用像

这样的东西
<bean id="authServerProperties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="location" ref="myProps" />
</bean>

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

这里我们将位置设置为字符串值,并允许Spring将其转换为适当的资源类型,所以如果你有

<env-entry>
    <env-entry-name>myProps</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>file:///Users/something/myProps.properties</env-entry-value>
</env-entry>

web.xml中,它会使用带有给定文件网址的UrlResource,否则会创建ClasspathResource来查找文件myprops.properties