将jndi资源加载到context:property-placeholder中

时间:2011-07-25 08:57:03

标签: spring jndi

我有以下spring配置文件:

<context:property-placeholder order="2"
    ignore-unresolvable="true" ignore-resource-not-found="true"
    location="file:///${user.home}/application.properties" />
<context:property-placeholder order="1"
    ignore-unresolvable="true" ignore-resource-not-found="true"
    location="file:///C:/Services/Tomcat 6.0/cms/application.properties" />
<context:property-placeholder order="3"
    location="classpath:com/afrozaar/cms/service/application.properties" />

注意它们是如何排序的,有些是在类路径上,有些是在文件系统上。

现在我要添加一个通过jndi加载的属性文件。我希望能够做到

<context:property-placeholder order="2"
    ignore-unresolvable="true" ignore-resource-not-found="true"
    location="jndi:url/application.properties" />

不幸的是,这不起作用,春天不支持jndi前缀... AFAIK。

那么,我可以这样做吗?

如果我不知道我的替代方案。我不想将整个配置转换为基于bean的完整属性占位符配置器。

2 个答案:

答案 0 :(得分:1)

不确定“jndi:url / application.properties”的真正含义。我想你想在名为“url / application.properties”的资源条目中设置属性文件的路径。

您可以使用以下代码段实现此目的:

<bean class="org.springframework.beans.factory.config.PlaceholderConfigurerSupport">
 <property name="location">
  <bean id="publisherLocal" class="org.springframework.jndi.JndiObjectFactoryBean">
   <property name="jndiName" value="url/application.properties" />
   <property name="expectedType" value="java.lang.String" />
   </bean>
 </property>
</bean>

答案 1 :(得分:0)

<context:property-placeholder>具有properties-ref属性,可以指向Properties类型的bean。因此,您可以在代码中加载Properties并使用它们声明<context:property-placeholder>