spring jndi NamingException:名称未绑定在此Context中

我的春季3.2.4的webapp运行正常。 但是当我启动它时,我将获得调试信息:

2014-05-20 11:11:47 DEBUG JndiTemplate:150 - Looking up JNDI object with name [java:comp/env/spring.liveBeansView.mbeanDomain] 2014-05-20 11:11:47 DEBUG JndiLocatorDelegate:101 - Converted JNDI name [java:comp/env/spring.liveBeansView.mbeanDomain] not found - trying original name [spring.liveBeansView.mbeanDomain]. javax.naming.NameNotFoundException: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context. Unable to find [spring.liveBeansView.mbeanDomain]. 2014-05-20 11:11:47 DEBUG JndiTemplate:150 - Looking up JNDI object with name [spring.liveBeansView.mbeanDomain] 2014-05-20 11:11:47 DEBUG JndiPropertySource:87 - JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with message: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context. Unable to find [spring.liveBeansView.mbeanDomain].. Returning null. 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:81 - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemProperties] 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:81 - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemEnvironment] 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:103 - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null] 2014-05-20 11:11:47 DEBUG DispatcherServlet:533 - Published WebApplicationContext of servlet 'spring' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring] 

我不知道这些信息是什么意思。 我使用c3p0作为我的dataSource ,配置是:

    /WEB-INF/config/jdbc.properties                        

我找不到JNDI的用途。我已经搜索了一些关于这个例外的问题。 但它们始终与@Profile@Configuration相关联。 我的代码中没有@Profile@Configuration

在我的bean类中,没有@Bean注释。 这些信息与此相关吗? 但我不需要spring注入我的bean类。

如果你不使用任何配置文件mbeans ,只需将以下context-params添加到web.xml作为解决方法(技巧),希望有人可以提供比这个丑陋的解决方案更好的解决方案。

  spring.profiles.active dev   spring.profiles.default dev   spring.liveBeansView.mbeanDomain dev  

这是JIRA问题,并简要解释了为什么它在第3季度第一次被引入。 此外,您可以在此function的初始提交中找到更多详细信息。

基本上,这个function是一种通过JMX公开来自某个应用程序的应用程序上下文中存在的bean的实时列表的方法。 例如,您在Tomcat中部署了一个Web应用程序,并在启动它时将其作为一个名为spring.liveBeansView.mbeanDomain的环境变量传递给它。 并且假设您没有给它任何值,或者只是一个空字符串。 Spring会搜索这类属性的一长串可能位置,并在系统环境中找到它。 如果发现它将知道通过JMX公开活动bean列表(采用JSON格式)。

如果您将JConsole连接到Tomcat实例,您将看到一个名为DefaultDomain的条目,并在其下面显示您的应用程序名称。 如果你扩展它应该有一个名为SnapshotAsJson的属性,这是来自webapp的应用程序上下文的bean的实时列表。

如果你给你的系统环境变量一个值,让我们说“test_domain”,在JMX中,该条目将被称为test_domain而不是DefaultDomain

所以,基本上你会看到那些DEBUG消息,因为Spring在很长的位置列表中搜索spring.liveBeansView.mbeanDomain属性,JNDI(在JEE服务器的情况下)是其中之一。

在SpringSource Tool Suite的最新版本中(可能在一些早期的版本中),有一个function可以利用这个名为“Live Beans Graph”的活动JMX曝光,它采用JSON表示并创建一些基本的图形表示。豆子。