【问题标题】:Parallel Deployment Exception并行部署异常
【发布时间】:2018-04-30 04:07:50
【问题描述】:

当我在 Tomcat 8 上部署我的 webapp 的新版本 (3.0.1) [在 Tomcat 上部署的是旧版本 (3.0.0)] 时,我得到了这个异常:

注册 LiveBeansView MBean 失败;嵌套异常是 javax.management.InstanceAlreadyExistsException

org.springframework.context.ApplicationContextException:注册LiveBeansView MBean失败;嵌套异常是 javax.management.InstanceAlreadyExistsException: security-base,security-api:application=/MyWebApplication 在 org.springframework.context.support.LiveBeansView.registerApplicationContext(LiveBeansView.java:72) 在 org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:776) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952) 在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473) 在 org.apache.catalina.startup.HostConfig.check(HostConfig.java:1617) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 在 com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 在 com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 在 org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1483) 在 org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:731) 在 org.apache.catalina.manager.ManagerServlet.doPut(ManagerServlet.java:424) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:651) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:589) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 引起:javax.management.InstanceAlreadyExistsException: security-base,security-api:application=/MyWebApplication 在 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.context.support.LiveBeansView.registerApplicationContext(LiveBeansView.java:68) ... 51 更多

在我的应用程序的 web.xml 中,我有这样的配置:

<context-param>  
    <param-name>spring.profiles.active</param-name>  
    <param-value>security-base,security-api</param-value>  
</context-param>  
<context-param>  
    <param-name>spring.profiles.default</param-name>  
    <param-value>security-base,security-api</param-value>  
</context-param>
<context-param>  
    <param-name>spring.liveBeansView.mbeanDomain</param-name>  
    <param-value>security-base,security-api</param-value>  
</context-param>

谁能帮帮我?

【问题讨论】:

    标签: java spring tomcat deployment parallel-processing


    【解决方案1】:

    由于您在 Tomcat 服务器上为 相同 应用程序(尽管版本不同)部署了 两个,因此您需要以不同的方式命名您的 MBean。由于每个服务器都访问 MBean(通过单个 JMX 端点),因此每个 MBean 标识符必须是独立的。

    您有几个选项可以使这些在您的应用中独一无二:

    1. 最简单的解决方案是将endpoints.jmx.unique-names 设置为true 并让Spring Boot make the MBean paths unique for you,而不是使用默认名称。 .
    2. 或者,您可以通过为应用程序设置spring.jmx.default-domain=applicationname 来更改 MBean 域
    3. 您可能不需要这个,但为了完整起见,请在此处添加;如果您在 Spring 配置中手动加载 bean,则可以添加 EnableMBeanExport 指定域:

      @Configuration
      @EnableMBeanExport(defaultDomain="first")
      public class MBeanConfig {...}
      

    【讨论】:

      【解决方案2】:

      在我的应用程序中添加了“spring.profiles”以摆脱调试日志。 spring jndi NamingException: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context 我通过修改每个已部署应用程序的 web.xml 来解决此问题,使每个 web.xml 的参数值唯一。

      prod

      测试

      例如:

      生产:

        <context-param>  
          <param-name>spring.profiles.active</param-name>  
          <param-value>prod</param-value>  
        </context-param>  
        <context-param>  
          <param-name>spring.profiles.default</param-name>  
          <param-value>prod</param-value>  
        </context-param>
        <context-param>  
          <param-name>spring.liveBeansView.mbeanDomain</param-name>  
          <param-value>prod</param-value>  
        </context-param>
      

      测试

        <context-param>  
          <param-name>spring.profiles.active</param-name>  
          <param-value>test</param-value>  
        </context-param>  
        <context-param>  
          <param-name>spring.profiles.default</param-name>  
          <param-value>test</param-value>  
        </context-param>
        <context-param>  
          <param-name>spring.liveBeansView.mbeanDomain</param-name>  
          <param-value>test</param-value>  
        </context-param>
      

      【讨论】:

        猜你喜欢
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多