Spring Boot构建正常,但抛出javax.naming.NameNotFoundException:运行

时间:2015-10-16 21:14:53

标签: java spring gradle spring-boot

我有一个现有的应用程序通过gradle构建正常但是当我通过嵌入式tomcat服务器运行它时,我得到以下异常。关于如何解决的任何想法?

  

org.springframework.beans.factory.BeanCreationException:错误   用名称&m; mbeanExporter'创建bean。在类路径资源中定义   [组织/ springframework的/引导/自动配置/ JMX / JmxAutoConfiguration.class]:   通过工厂方法进行Bean实例化失败;嵌套异常是   org.springframework.beans.BeanInstantiationException:失败   实例   [org.springframework.jmx.export.annotation.AnnotationMBeanExporter]:   工厂方法' mbeanExporter'抛出异常;嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   创建名为&m; 39的mbeanServer'在类路径资源中定义   [组织/ springframework的/引导/自动配置/ JMX / JmxAutoConfiguration.class]:   通过工厂方法进行Bean实例化失败;嵌套异常是   org.springframework.beans.BeanInstantiationException:失败   实例化[javax.management.MBeanServer]:工厂方法   ' Mbean服务器'抛出异常;嵌套异常是   org.springframework.jmx.MBeanServerNotFoundException:失败   从JNDI检索WebLogic MBeanServer;嵌套异常是   javax.naming.NameNotFoundException:剩余名称:env / jmx / runtime     在   org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)     在   org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:303)     在   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)     在   org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)     在   org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)     在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)     在   org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)     在   org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)     在   org.springframework.boot.SpringApplication.run(SpringApplication.java:321)     在   org.springframework.boot.SpringApplication.run(SpringApplication.java:967)     在   org.springframework.boot.SpringApplication.run(SpringApplication.java:956)     在com.avada.main.Application.main(Application.java:15)

4 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,并通过从Spring Boot配置中排除JmxAutoConfiguration类来修复它。

@SpringBootApplication(exclude = JmxAutoConfiguration.class)
public class Application {...}

看起来Spring试图创建一个在weblogic api库中检测到的bean(mbeanExporter),这个bean需要env/jmx/runtime JNDI。

答案 1 :(得分:3)

您可以通过添加以下行来跳过Spring Boot的加载配置:

@EnableAutoConfiguration(exclude = { JmxAutoConfiguration.class, EndpointMBeanExportAutoConfiguration.class})

新版Spring Boot中的容器(当前:1.5.4)尝试在应用程序服务器jar中加载其他bean,因此您需要添加此设置的排除(如:EndpointMBeanExportAutoConfiguration)。

答案 2 :(得分:2)

对我而言,将排除放在:

@EnableAutoConfiguration(exclude = JmxAutoConfiguration.class)

答案 3 :(得分:1)

MBean导出器认为它在Weblogic上运行:

  

无法从JNDI检索WebLogic MBeanServer

只有在类路径上weblogic.management.Helper时才会发生这种情况。您需要从类路径中删除该类。如果您不确定该类可能在哪里,则使用-verbose:class运行Tomcat会告诉您。