Spring batch javax.management.InstancealReadyExistException:spring.application:type=JobExecution,name=DATSFileFeeds

Spring batch javax.management.InstancealReadyExistException:spring.application:type=JobExecution,name=DATSFileFeeds,spring-batch,Spring Batch,我试图在一个tomcat服务器实例中部署两个WAR。但它是在抛出错误。有谁能帮忙吗。PFB错误日志 19:39:28294错误池-2-线程-1上下文。上下文加载器:220-上下文初始化失败 org.springframework.context.ApplicationContextException:无法启动bean“batchMBeanExporter”;嵌套异常为org.springframework.jmx.export.UnableToRegisterMBeanException:无法注

我试图在一个tomcat服务器实例中部署两个WAR。但它是在抛出错误。有谁能帮忙吗。PFB错误日志

19:39:28294错误池-2-线程-1上下文。上下文加载器:220-上下文初始化失败 org.springframework.context.ApplicationContextException:无法启动bean“batchMBeanExporter”;嵌套异常为org.springframework.jmx.export.UnableToRegisterMBeanException:无法注册MBean[org.springframework.batch.admin.jmx]。SimpleJobExecutionMetrics@1f069c]使用键'spring.application:type=JobExecution,name=DATSFileFeeds';嵌套异常为javax.management.InstanceAlreadyExistsException:spring.application:type=JobExecution,name=DATSFileFeeds 位于org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:169) 位于org.springframework.context.support.DefaultLifecycleProcessor.access$1(DefaultLifecycleProcessor.java:154) 位于org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:335) 位于org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:143) 位于org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:108) 位于org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:908) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:428) 位于org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 位于org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 位于org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) 位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:897) 位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:873) 位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958) 位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599) 位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在java.util.concurrent.FutureTask.run(FutureTask.java:262)处 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:744) 原因:org.springframework.jmx.export.UnableToRegisterMBeanException:无法注册MBean[org.springframework.batch.admin.jmx]。SimpleJobExecutionMetrics@1f069c]使用键'spring.application:type=JobExecution,name=DATSFileFeeds';嵌套异常为javax.management.InstanceAlreadyExistsException:spring.application:type=JobExecution,name=DATSFileFeeds 位于org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:602) 位于org.springframework.batch.admin.jmx.BatchMBeanExporter.registerJobs(BatchMBeanExporter.java:190) 位于org.springframework.batch.admin.jmx.BatchMBeanExporter.doStart(BatchMBeanExporter.java:353) 位于org.springframework.batch.admin.jmx.BatchMBeanExporter.start(BatchMBeanExporter.java:307) 位于org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:166) ... 还有22个 原因:javax.management.InstanceAlreadyExistsException:spring.application:type=JobExecution,name=DATSFileFeeds 位于com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) 位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) 位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) 位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) 位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) 位于com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) 位于org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:169) 位于org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:655) 位于org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:598) ... 26多


可以使用方法配置MBean注册的行为

目前有三项政策:

  • 在现有的上失败-尝试注册时应失败 以已存在的名称注册MBean
  • IGNORE_EXISTING-当尝试在已存在的名称下注册MBean时,注册应忽略受影响的MBean 存在
  • REPLACE_EXISTING-当尝试以已存在的名称注册MBean时,注册应替换受影响的MBean 存在
  • 例如:

    @Bean
    public AnnotationMBeanExporter annotationMBeanExporter() {
        AnnotationMBeanExporter annotationMBeanExporter = new AnnotationMBeanExporter();
        annotationMBeanExporter.setRegistrationPolicy(RegistrationPolicy.IGNORE_EXISTING);
    
        return annotationMBeanExporter;
    }
    

    您可以有条件地注册MBean:

    //Get the MBean server
    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    //register the MBean
    number = new NumberOfSomething();
    ObjectName name = new ObjectName("ru.pochta.abon.mbean:type=NumberOfSomething");
    if (!mbs.isRegistered(name)) {
        mbs.registerMBean(number, name);
    }
    

    我也尝试了这个方法,在广泛地搜索之后,我找到了一个解决这个问题的方法,我想把任何任性的、迷失的灵魂指向那个方向。