【问题标题】:Spring Loading all JNDI Properties弹簧加载所有 JNDI 属性
【发布时间】:2015-11-12 06:49:29
【问题描述】:

我有一个使用 tomcat 作为容器的 spring 应用程序。 Tomcat 的 context.xml 有以下条目:

<Resource name="jdbc/DB" auth="Container" type="javax.sql.DataSource"
          username="postgres" password=""
          url="jdbc:postgresql://localhost:5432/postgres"
          driverClassName="org.postgresql.Driver"/>
<Environment name="ws.url" type="java.lang.String" value="http://localhost:8088/" />

使用以下 xml 配置可以很好地加载资源:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/DB" expected-type="javax.sql.DataSource" />

但我尝试使用以下 xml 配置加载环境变量:(这里我尝试将 ${url} 设置为 http://localhost:8088/",如 context.xml 文件中的设置)

<bean id="databaseprops" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties">
            <bean class="java.util.Properties">
                <constructor-arg>
                    <map>
                        <entry key="url">
                            <jee:jndi-lookup jndi-name="java:comp/env/ws.url"/>
                        </entry>
                    </map>
                </constructor-arg>
            </bean>
        </property>
    </bean>

但我收到以下错误:

javax.naming.NameNotFoundException: Name [ws.url] is not bound in this Context. Unable to find [ws.url].

任何想法我做错了什么?

【问题讨论】:

    标签: xml spring tomcat jndi


    【解决方案1】:

    我设法解决了这个问题,技术上存在两个问题。

    NameNotFound 异常被抛出,因为我犯了使用错误版本的 tomcat 的愚蠢错误,即我在 tomcat 7 实例的 context.xml 中输入了上述 XML,但使用 tmocat 8 运行(我有用于测试目的的多个版本)。

    在我修复了一个新错误后,${url} 没有得到解决。我通过删除 bean databaseprops 并仅保留 java.util.Properties 类型的内部 bean 并给它一个 id 来解决这个问题,从而产生以下 XML 配置:

    <bean id="contextProperties" class="java.util.Properties">
        <constructor-arg>
            <map>
                <entry key="url">
                    <jee:jndi-lookup jndi-name="java:comp/env/ws.url"/>
                </entry>
            </map>
        </constructor-arg>
    </bean>
    

    然后我添加了以下 xml 配置来告诉 Spring 使用上面的 bean 来解析属性。

     <context:property-placeholder properties-ref="contextProperties"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2018-01-16
      • 2023-03-28
      • 2012-05-22
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多