使用JNDI查找属性来确定弹簧导入

时间:2011-12-22 02:03:47

标签: spring jndi

我正在尝试导入属性文件以确定我需要哪个导入。 我看了下面的内容,他们似乎没有确切的答案:

http://blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/ http://stackoverflow.com/questions/1520055/import-spring-config-file-based-on-property-in-properties-file

他们很接近,但不完全是我正在寻找的。

<beans:bean id="propertiesResource" class="org.springframework.jndi.JndiObjectFactoryBean"
    p:jndiName="java:comp/env/url/resource/avcs" p:defaultObject="classpath:avcs.properties"/>

<beans:bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <beans:property name="location" ref="propertiesResource"/>
</beans:bean>

<context:property-placeholder properties-ref="propertiesResource" system-properties-mode="ENVIRONMENT"/>

<beans:import resource="applicationContext.${application.context.import}.xml"/>

所以我需要使用JNDI查找来获取文件,然后加载属性然后导入特定的应用程序上下文。 如果我只使用带有类路径资源的property-placeholder,那么我相信一切都会很好但是在这种情况下我需要首先查找JNDI,并且看起来优先顺序将导入放在JNDI之前。

任何人都有机会找到答案吗?

我还有其他一些想法,但我只是想知道是否有人可能已经解决了这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我相信你必须做这样的事情。我还没有对它进行测试,但基本上PropertyPlaceholderConfigurer中的setLocations方法接受了一个Resource数组(在我们的例子中是UrlResource - http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/core/io/UrlResource.html),后者又有一个带有文件路径的构造函数。

<jee:jndi-lookup id="mypropsfile1" jndi-name="myPropsFile1" default-value="file:///C:/defaultPath" resource-ref="true"/>
<jee:jndi-lookup id="mypropsfile2" jndi-name="myPropsFile2" resource-ref="true"/>

<bean id="propertyConfigurer" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" depends-on="mypropsfile1,mypropsfile2">
  <property name="ignoreUnresolvablePlaceholders" value="true"/>
  <property name="locations">
        <list>
           <bean class="org.springframework.core.io.UrlResource">
               <constructor-arg><ref bean="mypropsfile1"/></constructor-arg>
           </bean>
           <bean class="org.springframework.core.io.UrlResource">
               <constructor-arg><ref bean="myPropsFile2"/></constructor-arg>
           </bean>
        </list>

  </property>
</bean>

检查此讨论here。依赖将有助于设置特定bean的依赖关系。