开发者社区> 问答> 正文

springboot打war包部署tomcat中启动报错

Caused by: javax.management.InstanceAlreadyExistsException: com.alibaba.druid.filter.stat:name=statFilter,type=StatFilter at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:195) at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:674) at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:618) ... 25 common frames omitted

springboot打war包部署tomcat中启动报错

原提问者GitHub用户haochencheng

展开
收起
山海行 2023-07-05 20:43:16 87 0
3 条回答
写回答
取消 提交回答
  • 根据您提供的错误信息,可能出现以下原因导致启动报错:

    1. 依赖冲突:在将Spring Boot应用打成war包时,需要排除内嵌的Tomcat依赖,否则会与Tomcat本身的依赖冲突。可以通过在pom.xml文件中添加相关配置来解决这个问题。

       xml    <dependencies>        <!-- 排除内嵌的Tomcat依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-tomcat</artifactId>                </exclusion>            </exclusions>        </dependency>            <!-- 添加Tomcat的提供的Servlet API依赖 -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <scope>provided</scope>        </dependency>            <!-- 其他依赖 -->        ...    </dependencies>    

    2. 部署路径不正确:确保将war包按照正确的结构部署到Tomcat的webapps目录下,并将其重命名为应用程序的名称。例如,如果应用程序的名称为myapp,则将war包重命名为myapp.war并放置在Tomcat的webapps目录下。

    3. 应用程序配置错误:将应用程序的配置文件(如application.properties或application.yml)放置在war包的根目录下,并确保其文件名符合Spring Boot的命名规范。

    另外,也有可能是Druid连接池的配置引起的问题。您可以尝试在应用程序的配置文件中添加以下配置来为Druid连接池指定不同的MBean名称:

    spring.jmx.default-domain=mydruid
    

    这样做可以确保在部署多个应用程序时,每个应用程序的MBean名称不同,避免冲突。

    2023-07-30 14:12:07
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    可能是以下原因导致:

    应用程序的依赖冲突。在将Spring Boot应用打成war包时,需要将内嵌的Tomcat依赖排除掉,否则可能会与Tomcat本身的依赖冲突。解决方法是在pom.xml文件中添加如下配置:

    xml
    Copy


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-tomcat



    javax.servlet
    javax.servlet-api
    provided

    其中,第一个依赖是Spring Boot Web Starter的依赖,需要将内嵌的Tomcat依赖排除掉;第二个依赖是Servlet API的依赖,需要将其作为Tomcat的提供的依赖。

    部署路径不正确。在将Spring Boot应用部署到Tomcat时,需要按照war包中的结构进行部署,否则可能会导致启动错误。解决方法是将war包放到Tomcat的webapps目录下,并将其重命名为应用程序的名称。

    应用程序配置错误。在将Spring Boot应用打成war包时,需要将应用程序的配置文件(例如application.properties或application.yml)放到war包的根目录下,否则可能无法读取应用程序的配置。解决方法是将应用程序的配置文件放到war包的根目录下,并确保其文件名符合Spring Boot的命名规范。

    2023-07-30 13:36:33
    赞同 展开评论 打赏
  • druid的state实例貌似只能启动一个 不能多启动, 我也是多个springboot打成war包跑的时候遇到的这个问题,目前没有一个非常好的解决办法

    出现这种问题是因为同时部署的时候spring 默认的mbean名字都一样了,只需要在每个yml下配置spring.jmx.default-domain= 自定义名字 ,名字不同,实例化出的对象就不一样了。

    原回答者GitHub用户Lisl0828

    2023-07-06 11:45:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载