1

我正在尝试使用带有默认值的 Spring jee 命名空间 JNDI 查找并遇到一些烦人的堆栈跟踪。我使用 Spring 3.1 和 tomcat 7 作为我的部署环境。有时 JNDI 变量可能没有在 context.xml 中设置,所以我希望能够使用 jee:jndi 标记的默认值属性。默认值实际上有效,但是每次达到默认值时它都会在日志中抛出一个堆栈跟踪。这是日志中的一个片段:

2012-09-17 08:39:21,099 [main] DEBUG org.springframework.jndi.JndiObjectFactoryBean - JNDI lookup failed - returning specified default object instead
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    ...
2012-09-17 08:39:21,113 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'coreURL'

我通过用于创建此 bean 的 spring 类进行了一些调试,并查看了 NoInitialContextException 被捕获的位置并触发它使用默认值。但是,我觉得如果有这个堆栈跟踪不应该打印到日志的默认值。我在这个假设中不正确吗?是否有一些设置可以用来消除此错误?这是我对 bean 的 spring 配置:

<jee:jndi-lookup id="coreURL" expected-type="java.lang.String" jndi-name="java:comp/env/my.prop" default-value="http://myserver.com/core"/>
4

2 回答 2

1

将 LOG LEVEL 设置为org.springframework.jndi.JndiObjectFactoryBeanINFO,您将看不到此 DEBUG 信息。

于 2012-09-17T15:35:16.030 回答
1

对我来说 default-value="" 似乎也失败了。您必须输入一个非空字符串值。

于 2015-07-06T11:01:59.677 回答