我正在尝试使用Spring jee命名空间JNDI查找默认值并遇到一些烦人的堆栈跟踪。我使用Spring 3.1和tomcat 7作为我的部署环境。有时可能没有在context.xml中设置JNDI变量,所以我希望能够使用jee:jndi标签的default-value属性。默认值实际上有效,但每次进入默认值时,它会在日志中抛出一个堆栈跟踪。这是日志中的一个片段:
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的弹簧配置:
<jee:jndi-lookup id="coreURL" expected-type="java.lang.String" jndi-name="java:comp/env/my.prop" default-value="http://myserver.com/core"/>
答案 0 :(得分:1)
将org.springframework.jndi.JndiObjectFactoryBean
的LOG LEVEL设置为INFO,然后您将看不到此DEBUG信息。
答案 1 :(得分:1)
对我来说,default-value =“”似乎也失败了。您必须输入非空字符串值。