我正在尝试使用带有默认值的 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"/>