根据这篇guide创建了一个简单的spring boot应用,能运行且成功的访问。但移植到现有项目(基于hbase)中的时候,却报出以下错误:
SEVERE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:188) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:801) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) ... 6 more Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.addServlet(Ljava/lang/String;Ljavax/servlet/Servlet;)Ljavax/servlet/ServletRegistration$Dynamic; at org.springframework.boot.context.embedded.ServletRegistrationBean.onStartup(ServletRegistrationBean.java:156) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext$1.onStartup(EmbeddedWebApplicationContext.java:219) at org.springframework.boot.context.embedded.tomcat.ServletContextInitializerLifecycleListener.lifecycleEvent(ServletContextInitializerLifecycleListener.java:54) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5343) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more
一般碰到NoSuchMethodError,要么是没有引入dependency,要么是jar包冲突。在这里应该是servlet-api.jar有冲突。
用命令mvn dependency:tree查看项目所有dependencies,发现有以下依赖:
[INFO] | +- org.apache.hbase:hbase-server:jar:0.96.1.1-cdh5.0.2:compile
...
[INFO] | | +- org.mortbay.jetty:servlet-api-2.5:jar:6.1.14:compile
...
[INFO] | | +- org.apache.hadoop:hadoop-common:jar:2.3.0-cdh5.0.2:compile
...
[INFO] | | | +- javax.servlet:servlet-api:jar:2.5:compile
...
...
[INFO] | | +- org.mortbay.jetty:servlet-api-2.5:jar:6.1.14:compile
...
[INFO] | | +- org.apache.hadoop:hadoop-common:jar:2.3.0-cdh5.0.2:compile
...
[INFO] | | | +- javax.servlet:servlet-api:jar:2.5:compile
...
hbase-server中也有servlet-api的jar包,尝试将其移除:
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>0.96.1.1-cdh5.0.2</version> <exclusions> <exclusion> <groupId>org.mortbay.jetty</groupId> <artifactId>servlet-api-2.5</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency>
运行成功。
相关推荐
Spring Boot启动过程(四)之Spring Boot内嵌Tomcat启动 本文主要介绍了Spring Boot启动过程(四)之Spring Boot内嵌Tomcat启动的相关知识点,用于帮助开发者更好地理解Spring Boot的启动过程。 一、...
内嵌的 Tomcat 容器是 Spring Boot 默认的 Web 服务器,使得我们可以无需额外配置即可运行 Java Web 应用。在本篇文章中,我们将探讨如何对 Spring Boot 内嵌的 Tomcat 进行个性化配置。 首先,Spring Boot 提供了 ...
Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解 Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解是Spring Boot启动过程的重要组件之一,本文将详细介绍Springboot内嵌...
Spring Boot 单独升级 Tomcat 在 Spring Boot 项目中,Tomcat 的升级是非常重要的,因为低版本的 Tomcat 存在漏洞,可能会导致安全问题。在本文中,我们将详细介绍如何单独升级 Tomcat,以解决漏洞问题。 知识点 1...
《Learning Spring Boot 3.0 - 第三版》是...书中还会深入讨论Spring Boot的核心特性,比如自动配置、健康检查、内嵌的Tomcat或Jetty服务器、Spring MVC用于构建RESTful API,以及数据访问层的集成,包括JPA和Hibernat
《Spring Boot整合MyBatis与外部Tomcat启动详解》 在现代Java开发中,Spring Boot以其简洁、快速的特性受到了广大开发者的喜爱。而MyBatis作为轻量级的持久层框架,以其灵活的SQL映射功能,为数据库操作提供了便利...
3. 内嵌式Servlet容器:Spring Boot支持内嵌Tomcat、Jetty或Undertow,无需额外部署WAR文件。 4. 健康检查:提供健康检查API,用于监控系统状态。 5. 配置文件:通过application.properties或application.yml进行...
Spring Boot的设计初衷是为了快速启动和运行Spring应用程序,避免了传统的Spring项目中复杂繁琐的配置和依赖管理。传统开发模式下,开发者需要花费大量时间进行配置和解决依赖冲突问题,而这些工作并不是业务逻辑...
- Spring Boot支持内嵌Tomcat、Jetty等Web服务器,无需额外部署,简化了开发流程。 4. **健康检查与Actuator** - Actuator提供了一组端点,用于监控和管理应用的健康状况、指标、日志等,是微服务治理的重要组件...
- 处理Spring Boot应用启动失败的情况。 - **23.2. 自定义Banner** - 显示自定义的启动Banner。 - **23.3. 自定义SpringApplication** - 通过自定义SpringApplication来扩展Spring Boot的功能。 - **23.4. 流式...
3. **内嵌服务器**:Spring Boot 内置了如 Tomcat 或 Jetty 这样的 Web 服务器,使得无需额外配置即可启动服务。 4. **命令行工具**:Spring Boot 提供了命令行界面,允许快速创建和运行 Spring 应用。 5. **健康...
- **内嵌服务器**:Spring Boot 支持内嵌 Tomcat、Jetty 或 Undertow 服务器,无需额外部署,简化了开发流程。 - **运行器**:提供了命令行接口(CLI),方便快速创建和运行 Spring 应用。 - **健康检查**:内置健康...
3. **Spring Boot与内嵌Tomcat**: Spring Boot默认集成了内嵌Tomcat,使得开发基于Spring的应用变得简单。通过`@SpringBootApplication`注解,Spring Boot会自动配置并启动内嵌的Tomcat服务器。 4. **META-INF目录*...
例如,如果项目中包含了`spring-boot-starter-web`起步依赖,那么Spring Boot将自动配置一个内嵌的Tomcat服务器。 2. 嵌入式服务器:Spring Boot允许在应用中直接包含Web服务器(如Tomcat或Jetty),无需单独部署到...
这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器(如Tomcat)启动Web应用。 对于计算机科学的学生来说,这个压缩包可以作为毕业设计论文的参考资源,他们可以...
2. **嵌入式Web服务器**:Spring Boot支持内嵌Tomcat或Jetty,无需额外部署到外部容器,简化了开发和测试流程。 3. **自动配置(Auto-configuration)**:Spring Boot通过条件注解来自动配置应用,比如`@...
本文将讲述如何使用Arthas工具来定位和解决Spring Boot中内嵌Tomcat问题,通过记录一次实际的定位和处理流程,来分享解决问题的经验和方法。 一、问题背景 在Spring Boot中,内嵌Tomcat是非常常见的做法,但是在...
4. **内嵌Web服务器**:Spring Boot支持内嵌Tomcat、Jetty等Web服务器,使得部署更加简单。书中会讲解如何配置和使用这些服务器,并演示如何创建RESTful服务。 5. **Spring MVC**:作为Spring Boot的主要Web开发...
9. **嵌入式服务器**:Spring Boot支持内嵌的Tomcat、Jetty等服务器,源码中,`EmbeddedServletContainerFactory`接口及其实现类用于创建和配置内嵌服务器。 10. **错误处理**:Spring Boot提供了一套统一的错误...
2. **内嵌服务器(Embedded Servers)**:Spring Boot支持内嵌Tomcat、Jetty或Undertow服务器,这样可以直接运行打包后的jar文件,而无需额外部署到外部容器,大大提高了开发效率。 3. **自动配置(Auto ...