在Spring中从外部属性文件读取JNDI名称

时间:2018-09-07 08:07:24

标签: spring spring-mvc

我正在开发一个Spring Web应用程序,其中正在使用JMS以及一些数据源连接。

现在,我不是要对DataSource / Jms Connection Factory的JNDI名称进行硬编码,而是要从外部属性文件中读取它们。

我使用了以下配置:

<bean id="myProps" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath*:myFile"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
 `<jee:jndi-lookup` id="dataSource" jndi-name="${DS_JNDI}" expected-type="javax.sql.DataSource"/>

但是在部署期间,它会在weblogic :::

中引发错误
javax.naming.NameNotFoundException: Unable to resolve '${DS_JNDI}'. Resolved ''; remaining name '${DS_JNDI}'

就像使用<jee:jndi-lookup>时不能放置属性文件条目吗?

2 个答案:

答案 0 :(得分:0)

您应该删除classpath之后的星号,并添加文件扩展名的属性

<bean id="myProps" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:myFile.properties"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

答案 1 :(得分:0)

<bean id="myProperties"  class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
   <property name="locations"> 
      <list> 
         <value>classpath*:myFile.properties</value> 
      </list> 
   </property> 
</bean>

这是问题的正确解决方案。我认为从Spring5.x开始,它已停止附加“ .properties”扩展名。