Spring Boot 构建良好,但在运行时抛出 javax.naming.NameNotFoundException: remaining name: env/jmx/runtime

Posted

技术标签:

【中文标题】Spring Boot 构建良好,但在运行时抛出 javax.naming.NameNotFoundException: remaining name: env/jmx/runtime【英文标题】:Spring Boot builds fine but throws javax.naming.NameNotFoundException: remaining name: env/jmx/runtime when running 【发布时间】:2016-01-15 17:58:04 【问题描述】:

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

org.springframework.beans.factory.BeanCreationException: 错误 创建在类路径资源中定义的名称为“mbeanExporter”的 bean [org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.jmx.export.annotation.AnnotationMBeanExporter]: 工厂方法“mbeanExporter”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 在类路径资源中创建名称为“mbeanServer”的 bean [org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [javax.management.MBeanServer]:工厂方法 'mbeanServer' 抛出异常;嵌套异常是 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)

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

对我来说,有效的是将排除项放在:

@EnableAutoConfiguration(exclude = JmxAutoConfiguration.class)

【讨论】:

【参考方案3】:

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

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

似乎 Spring 正在尝试创建在 weblogic api 库中检测到的 bean (mbeanExporter),而该 bean 需要 env/jmx/runtime JNDI。

【讨论】:

【参考方案4】:

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

无法从 JNDI 检索 WebLogic MBeanServer

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

【讨论】:

谢谢安迪 - 我在我包含的特定 jar 中找到了该类 - compile files('WebContent/WEB-INF/lib/wls-api.jar') - 关于如何排除 weblogic.management.Helper 被编译为该 jar 的任何想法? 鉴于您使用的是 Tomcat,您不能直接删除整个 jar 吗? 我们与 WebLogic 交互,所以我们需要这个 jar

以上是关于Spring Boot 构建良好,但在运行时抛出 javax.naming.NameNotFoundException: remaining name: env/jmx/runtime的主要内容,如果未能解决你的问题,请参考以下文章

为啥 spring-boot 应用程序无法在 AWS 中运行,但在本地运行良好?

Intellij 运行相同的 Spring Boot 项目,社区版运行良好,但终极版抛出错误

Unity 在为 Android 构建时在运行时抛出 IL2CPP 构建错误? 2018.4.5f1

测试期间的Spring Boot JPA事务 - 不会在插入时抛出密钥违例异常

.NET 控制台应用程序在计划时抛出错误。手动执行时运行良好

React Native:执行 UI 块时抛出异常