带有配置单元连接的Spring引导应用程序不';t启动嵌入式Tomcat

带有配置单元连接的Spring引导应用程序不';t启动嵌入式Tomcat,spring,tomcat,jdbc,hive,spring-data,Spring,Tomcat,Jdbc,Hive,Spring Data,我使用Spring Boot,希望通过Spring数据hadoop 2.3.0.M1-hdp23将其连接到Hive。问题是,如果我将配置单元jdbc添加到pom.xml中,我的应用程序将无法启动。错误日志(部分)为: 有趣的是:如果我从我的pom.xml中删除hivejdbc依赖项,那么应用程序就会启动,我可以做其他任何事情,比如访问MySQL连接和访问所有类。只有当我想访问hive时,我才得到一个java.lang.ClassNotFoundException:org.apache.hive.

我使用Spring Boot,希望通过Spring数据hadoop 2.3.0.M1-hdp23将其连接到Hive。问题是,如果我将配置单元jdbc添加到pom.xml中,我的应用程序将无法启动。错误日志(部分)为:

有趣的是:如果我从我的pom.xml中删除hivejdbc依赖项,那么应用程序就会启动,我可以做其他任何事情,比如访问MySQL连接和访问所有类。只有当我想访问hive时,我才得到一个java.lang.ClassNotFoundException:org.apache.hive.jdbc.HiveDriver。当然,他找不到它,因为缺少依赖项,但这表明这种依赖项会带来麻烦。我尝试了其他版本,但没有成功。如果我删除了排除标记,则会出现其他错误:

    org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDefault(Z)V
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.myApp.Application.main(Application.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.boot.maven.RunMojo$LaunchRunner.run(RunMojo.java:418)
at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDefault(Z)V
at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.addDefaultServlet(JettyEmbeddedServletContainerFactory.java:289)
at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.configureWebAppContext(JettyEmbeddedServletContainerFactory.java:236)
at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.getEmbeddedServletContainer(JettyEmbeddedServletContainerFactory.java:122)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 13 common frames omitted

希望任何人都有办法解决这个问题。

我也遇到了同样的情况

在我的例子中,这是servlet api上的冲突

我在pom.xml文件中添加了此排除:

        <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

org.apache.hadoop
hadoop客户端
${hadoop.version}
javax.servlet
servlet api

以下是对我有效的方法:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>2.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.eclipse.jetty.aggregate</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
spring启动程序日志记录
org.apache.hive
蜂窝jdbc
2.0.0
org.eclipse.jetty.aggregate
*

这种依赖关系对我很有效。 注意:不要使用hive jdbc版本3


org.apache.hive
蜂窝jdbc
2.3.5
jdk.tools
jdk.tools
org.eclipse.jetty.aggregate
*
如果使用gradle:

implementation('org.apache.hive:hive-jdbc:1.2.1') {
    exclude group: 'org.eclipse.jetty.aggregate'
}

它适用于我的spring boot+hibernate应用程序,谢谢。
        <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>2.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.eclipse.jetty.aggregate</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
implementation('org.apache.hive:hive-jdbc:1.2.1') {
    exclude group: 'org.eclipse.jetty.aggregate'
}