我真的被困在这一个......救命! :)
我正在使用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>
答案 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
。