【问题标题】:Reading JNDI name from external properties file in Spring在 Spring 中从外部属性文件中读取 JNDI 名称
【发布时间】:2018-09-07 08:07:23
【问题描述】:

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

现在我不想硬编码 DataSource/Jms 连接工厂的 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}'

是不是我用&lt;jee:jndi-lookup&gt;的时候不能放属性文件入口???

【问题讨论】:

  • 尝试给出确切的文件名。 classpath*:myFile.properties
  • 我认为它附加了 .properties 本身。此外,使用 PropertiesFactoryBean 需要什么?我们可以使用 PropertyPlaceholderConfigurer
  • 对不起,我的错。 'PropertyPlaceholderConfigurer' 是我打算给出的。不确定它是否会出现“.properties”。希望您甚至尝试避免使用“ignoreUnresolvablePlaceholders”,因为它的描述说“如果无法解析占位符,请使用 ignoreUnresolvablePlaceholders 故意抑制抛出异常。”
  • 或者你可以选择一个更轻的版本 并确保文件在类路径中。

标签: spring spring-mvc


【解决方案1】:

你应该去掉类路径后的星号,并添加文件扩展名的属性

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

【讨论】:

    【解决方案2】:
    <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”扩展名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 2019-07-31
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2011-08-10
      相关资源
      最近更新 更多