jboss classloader机制以及scope配置

1.  概念介绍

UCL : org.jboss.mx.loading.UnifiedClassLoader3 ,它继承标准的java.net.URLClassLoader,覆盖了标准parent delegation模型以使用共享class和资源仓库

 

仓库(responsitory): org.jboss.mx.loading.UnifiedLoaderRepository3。

 

平面模型:为了热deploy模块的需要,JBoss实现了自己的类装载器UnifiedClassLoader3,一般来说,一个顶层的deployment就有一个UnifiedClassLoader3实例为之工作。一个deployment所装载的类,其他 deployment是可见的。全局唯一的UnifiedLoaderRepository3实例用于管理这些类,以及装载它们的UnifiedClassLoader3。UnifiedLoaderRepository3实例和UnifiedClassLoader3实例是一对多的关系。

2. jboss classloader机制
   

< mbean  code ="org.jboss.management.j2ee.LocalJBossServerDomain"
      name
="jboss.management.local:j2eeType=J2EEDomain,name=Manager" >
      
< attribute  name ="MainDeployer" > jboss.system:service=MainDeployer </ attribute >
      
< attribute  name ="SARDeployer" > jboss.system:service=ServiceDeployer </ attribute >
      
< attribute  name ="EARDeployer" > jboss.j2ee:service=EARDeployer </ attribute >
      
< attribute  name ="EJBDeployer" > jboss.ejb:service=EJBDeployer </ attribute >
      
< attribute  name ="RARDeployer" > jboss.jca:service=RARDeployer </ attribute >
      
< attribute  name ="CMDeployer" > jboss.jca:service=ConnectionFactoryDeployer </ attribute >
      
< attribute  name ="WARDeployer" > jboss.web:service=WebServer </ attribute >
      
< attribute  name ="CARDeployer" > jboss.j2ee:service=ClientDeployer </ attribute >
      
< attribute  name ="MailService" > jboss:service=Mail </ attribute >
      
< attribute  name ="JMSService" > jboss.mq:service=DestinationManager </ attribute >
      
< attribute  name ="JNDIService" > jboss:service=Naming </ attribute >
      
< attribute  name ="JTAService" > jboss:service=TransactionManager </ attribute >
      
< attribute  name ="UserTransactionService" > jboss:service=ClientUserTransaction </ attribute >
      
< attribute  name ="RMI_IIOPService" > jboss:service=CorbaORB </ attribute >
   
</ mbean >


   首先看一下各种类型的deployer。不同的deployer是根据文件的后缀进行区分。MainDeployer起到一个controller的作用,根据不用的后缀分发到不同的deployer进行处理。如果是*.ear,则会由EARDeployer进行载入。
应用的加载时一个 Top Level Deployer + Top Level Ucl。 举个例子,比如发布一个a.ear应用,ear应用中会包含一个*.war。这时候就会涉及deployer选择问题。jboss采取的原则就是按Top Level,根据最顶层的应用选择deployer,继而也有了top level ucl的概念。由顶级的ucl来加载整个应用。这里需要注意的是war的部署有点特别。它只是将自身添加到ucl的classpath域中,而war下的WEB-INF/lib/*.jar,则是由WebAppClassloader来加载。可调整ear下的 META-INF/jboss-service.xml中的UseJbossWebLoader属性。如果设置为true,故名思义就是用ucl来加载war下的jar包。否则就是采用独立的classloader加载。
   再看一下ucl的加载过程,首先会调用仓库去loadclass,仓库在查找无果的情况下会回调各自的UCL去加载本地库。


3. jboss scope配置

ClassLoadingConfiguration一书中描述:

There are two levels of scoping, isolation from other deployments, and isolation that overrides the loading of JBoss server classes. With nested modules, only the top level file may specify class loader scoping. If you have a .ear file containing other modules, only scoping specified in the .ear 's META-INF/jboss-app.xml is used. This also applies for any other deployment which contains sub-deployments. For example, if a .sar contains a .war deployment, only the .sar META-INF/jboss-service.xml scoping has effect.

 

   意思是说,scope配置只能是顶级下的配置,比如一个.sar中包含.war都配置了scope,只有.sar下的 META-INF/jboos-service.xml才有效。这也与前面 TOP level UCL + TOP Devloper相对应。
    

    针对.sar,你可以在jboss-service.xml中,添加如下配置:
< server >   
    
< loader-repository >  com.example:loader=unique-archive-name  </ loader-repository >   
</ server >

        
    针对 .ear,你可以在 jboss-app.xml添加如下配置:
    
< jboss-app >   
  
< loader-repository > com.example:loader=unique-archive-name </ loader-repository >   
</ jboss-app >
    
    针对 .war,你可以在jboss-web.xml添加如下配置:
    
< jboss-web >
< class-loading  java2ClassLoadingCompliance ='true'>  
       
<loader-repository >     
             com.example:loader=unique-archive-name  
             
< loader-repository-config >   
                 java2ParentDelegaton=true  
             
</ loader-repository-config >   
      
</ loader-repository >     
 
</ class-loading >
</ jboss-web >
   
   注意,在最新的4.2.1版本中,<class-loading>标签已经不再使用,你可以直接配置:
< jboss-web >     
    
< loader-repository >  com.example:loader=unique-archive-name  </ loader-repository >     
</ jboss-web >

    针对这两种方式的配置,4.0.5版本都支持。  
      
    针对典型的ear+war应用,*.ear/META-INF/jboos-service.xml,用于调整war的加载方式。
 
<!--  Get the flag indicating if the normal Java2 parent first class   
           loading model should be used over the servlet 2.3 web container first   
           model.   
      
-->   
      
< attribute  name ="Java2ClassLoadingCompliance" > false </ attribute >   
      
<!--  A flag indicating if the JBoss Loader should be used. This loader   
           uses a unified class loader as the class loader rather than the tomcat   
           specific class loader.   
           The default is false to ensure that wars have isolated class loading   
           for duplicate jars and jsp files.   
      
-->   
      
< attribute  name ="UseJBossWebLoader" > false </ attribute >   
    配置java2ClassLoadingCompliance为true,则表明是选择parent first。典型的classloader的双亲委托模型,否则是采用child first,先从自身加载,找不到再相父类请求。
    配置 UseJBossWebLoader为false,则webapp的加载通过独立于jboss的classloader进行加载。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>Hive</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hive</name> <description>Hive Connection Demo</description> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!--<spring-version>5.1.0.RELEASE</spring-version>--> <!--<hibernate.version>5.3.6.Final</hibernate.version>--> <poi-version>3.13</poi-version> <junit.version>4.12</junit.version> <mysql.connection.version>8.0.33</mysql.connection.version> <activemq.version>5.9.1</activemq.version> <jackson-version>2.9.6</jackson-version> <!--spring cloud version--> <spring-cloud.version>2021.0.1</spring-cloud.version> <nacos.version>2021.0.1.0</nacos.version> <swagger.version>2.9.2</swagger.version> <fastjson.version>1.2.83</fastjson.version> <pinyin4j.version>2.5.1</pinyin4j.version> <commons-pool2.version>2.11.1</commons-pool2.version> </properties> <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories> <dependencyManagement> <dependencies> <!--按需继承,model所需依赖在此处定义groupId、artifactId、version,子model只需要指定groupId、artifactId即可,非公共性依赖不建议直接使用depandencys预定义依赖,否则子model会自动继承depandencys中所预定义依赖--> <!--spring-cloud--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${nacos.version}</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${nacos.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.4</version> </dependency> <!--swagger2--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.22</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.22</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connection.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>${commons-pool2.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.0.0-cdh6.3.2</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.0.0-cdh6.3.2</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.1.1-cdh6.3.2</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>2.1.1-cdh6.3.2</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-common</artifactId> <version>2.1.1-cdh6.3.2</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop</artifactId> <version>2.5.0.RELEASE</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j --> <!-- <dependency>--> <!-- <groupId>com.belerweb</groupId>--> <!-- <artifactId>pinyin4j</artifactId>--> <!-- <version>2.5.1</version>--> <!-- </dependency>--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency> <!--简化Domain代码--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> </project>D:\Java\jdk-1.8\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Maven\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=63100:D:\Maven\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\jdk-1.8\jre\lib\charsets.jar;D:\Java\jdk-1.8\jre\lib\deploy.jar;D:\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;D:\Java\jdk-1.8\jre\lib\ext\dnsns.jar;D:\Java\jdk-1.8\jre\lib\ext\jaccess.jar;D:\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;D:\Java\jdk-1.8\jre\lib\ext\localedata.jar;D:\Java\jdk-1.8\jre\lib\ext\nashorn.jar;D:\Java\jdk-1.8\jre\lib\ext\sunec.jar;D:\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;D:\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk-1.8\jre\lib\ext\zipfs.jar;D:\Java\jdk-1.8\jre\lib\javaws.jar;D:\Java\jdk-1.8\jre\lib\jce.jar;D:\Java\jdk-1.8\jre\lib\jfr.jar;D:\Java\jdk-1.8\jre\lib\jfxswt.jar;D:\Java\jdk-1.8\jre\lib\jsse.jar;D:\Java\jdk-1.8\jre\lib\management-agent.jar;D:\Java\jdk-1.8\jre\lib\plugin.jar;D:\Java\jdk-1.8\jre\lib\resources.jar;D:\Java\jdk-1.8\jre\lib\rt.jar;D:\Maven\ideaProject\Hive\ifs-hive-application\target\classes;D:\Maven\ideaProject\Hive\ifs-hive\target\classes;D:\Maven\repository\org\springframework\boot\spring-boot-starter-mail\2.7.18\spring-boot-starter-mail-2.7.18.jar;D:\Maven\repository\org\springframework\spring-context-support\5.3.31\spring-context-support-5.3.31.jar;D:\Maven\repository\com\sun\mail\jakarta.mail\1.6.7\jakarta.mail-1.6.7.jar;D:\Maven\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-amqp\2.7.18\spring-boot-starter-amqp-2.7.18.jar;D:\Maven\repository\org\springframework\spring-messaging\5.3.31\spring-messaging-5.3.31.jar;D:\Maven\repository\org\springframework\amqp\spring-rabbit\2.4.17\spring-rabbit-2.4.17.jar;D:\Maven\repository\org\springframework\amqp\spring-amqp\2.4.17\spring-amqp-2.4.17.jar;D:\Maven\repository\org\springframework\retry\spring-retry\1.3.4\spring-retry-1.3.4.jar;D:\Maven\repository\com\rabbitmq\amqp-client\5.14.3\amqp-client-5.14.3.jar;D:\Maven\repository\org\springframework\spring-tx\5.3.31\spring-tx-5.3.31.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.7.18\spring-boot-starter-data-jpa-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-aop\2.7.18\spring-boot-starter-aop-2.7.18.jar;D:\Maven\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;D:\Maven\repository\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3.jar;D:\Maven\repository\jakarta\persistence\jakarta.persistence-api\2.2.3\jakarta.persistence-api-2.2.3.jar;D:\Maven\repository\org\hibernate\hibernate-core\5.6.15.Final\hibernate-core-5.6.15.Final.jar;D:\Maven\repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;D:\Maven\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\Maven\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;D:\Maven\repository\org\hibernate\common\hibernate-commons-annotations\5.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;D:\Maven\repository\org\glassfish\jaxb\jaxb-runtime\2.3.9\jaxb-runtime-2.3.9.jar;D:\Maven\repository\org\glassfish\jaxb\txw2\2.3.9\txw2-2.3.9.jar;D:\Maven\repository\com\sun\istack\istack-commons-runtime\3.0.12\istack-commons-runtime-3.0.12.jar;D:\Maven\repository\org\springframework\data\spring-data-jpa\2.7.18\spring-data-jpa-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-commons\2.7.18\spring-data-commons-2.7.18.jar;D:\Maven\repository\org\springframework\spring-orm\5.3.31\spring-orm-5.3.31.jar;D:\Maven\repository\org\springframework\spring-aspects\5.3.31\spring-aspects-5.3.31.jar;D:\Maven\repository\com\alibaba\druid-spring-boot-starter\1.2.6\druid-spring-boot-starter-1.2.6.jar;D:\Maven\repository\com\alibaba\druid\1.2.6\druid-1.2.6.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-data-redis\2.7.18\spring-boot-starter-data-redis-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-redis\2.7.18\spring-data-redis-2.7.18.jar;D:\Maven\repository\org\springframework\data\spring-data-keyvalue\2.7.18\spring-data-keyvalue-2.7.18.jar;D:\Maven\repository\org\springframework\spring-oxm\5.3.31\spring-oxm-5.3.31.jar;D:\Maven\repository\io\lettuce\lettuce-core\6.1.10.RELEASE\lettuce-core-6.1.10.RELEASE.jar;D:\Maven\repository\io\netty\netty-common\4.1.101.Final\netty-common-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-handler\4.1.101.Final\netty-handler-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-resolver\4.1.101.Final\netty-resolver-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-buffer\4.1.101.Final\netty-buffer-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-transport-native-unix-common\4.1.101.Final\netty-transport-native-unix-common-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-codec\4.1.101.Final\netty-codec-4.1.101.Final.jar;D:\Maven\repository\io\netty\netty-transport\4.1.101.Final\netty-transport-4.1.101.Final.jar;D:\Maven\repository\io\projectreactor\reactor-core\3.4.34\reactor-core-3.4.34.jar;D:\Maven\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\Maven\repository\com\kingee\sso\kingee-sso\1\kingee-sso-1.jar;D:\Maven\repository\com\bip\bip-api\1.0\bip-api-1.0.jar;D:\Maven\repository\com\kingdell\hr\kingdell-hr\1\kingdell-hr-1.jar;D:\Maven\repository\cn\afterturn\easypoi-annotation\4.1.0\easypoi-annotation-4.1.0.jar;D:\Maven\repository\cn\afterturn\easypoi-base\4.1.0\easypoi-base-4.1.0.jar;D:\Maven\repository\ognl\ognl\3.2.6\ognl-3.2.6.jar;D:\Maven\repository\org\javassist\javassist\3.20.0-GA\javassist-3.20.0-GA.jar;D:\Maven\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\Maven\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-jdbc\2.7.18\spring-boot-starter-jdbc-2.7.18.jar;D:\Maven\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\Maven\repository\org\springframework\spring-jdbc\5.3.31\spring-jdbc-5.3.31.jar;D:\Maven\repository\com\jcraft\jsch\0.1.55\jsch-0.1.55.jar;D:\Maven\repository\com\hy\base\hy-common\9.0-SNAPSHOT\hy-common-9.0-20250903.082902-9.jar;D:\Maven\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;D:\Maven\repository\io\swagger\swagger-annotations\1.5.22\swagger-annotations-1.5.22.jar;D:\Maven\repository\io\swagger\swagger-models\1.5.22\swagger-models-1.5.22.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.5\jackson-annotations-2.13.5.jar;D:\Maven\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;D:\Maven\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;D:\Maven\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\Maven\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;D:\Maven\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;D:\Maven\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;D:\Maven\repository\com\mysql\mysql-connector-j\8.0.33\mysql-connector-j-8.0.33.jar;D:\Maven\repository\org\springframework\boot\spring-boot-actuator\2.7.18\spring-boot-actuator-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.7.18\spring-boot-actuator-autoconfigure-2.7.18.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-databind\2.13.5\jackson-databind-2.13.5.jar;D:\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.5\jackson-datatype-jsr310-2.13.5.jar;D:\Maven\repository\org\apache\poi\poi\4.0.0\poi-4.0.0.jar;D:\Maven\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\Maven\repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\Maven\repository\org\apache\poi\poi-scratchpad\4.0.0\poi-scratchpad-4.0.0.jar;D:\Maven\repository\com\monitorjbl\xlsx-streamer\2.1.0\xlsx-streamer-2.1.0.jar;D:\Maven\repository\org\apache\poi\poi-ooxml-schemas\4.0.0\poi-ooxml-schemas-4.0.0.jar;D:\Maven\repository\org\apache\xmlbeans\xmlbeans\3.0.1\xmlbeans-3.0.1.jar;D:\Maven\repository\com\rackspace\apache\xerces2-xsd11\2.11.1\xerces2-xsd11-2.11.1.jar;D:\Maven\repository\com\rackspace\eclipse\webtools\sourceediting\org.eclipse.wst.xml.xpath2.processor\2.1.100\org.eclipse.wst.xml.xpath2.processor-2.1.100.jar;D:\Maven\repository\edu\princeton\cup\java-cup\10k\java-cup-10k.jar;D:\Maven\repository\com\ibm\icu\icu4j\4.6\icu4j-4.6.jar;D:\Maven\repository\xml-resolver\xml-resolver\1.2\xml-resolver-1.2.jar;D:\Maven\repository\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01.jar;D:\Maven\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Maven\repository\org\apache\poi\poi-ooxml\4.0.0\poi-ooxml-4.0.0.jar;D:\Maven\repository\org\apache\commons\commons-compress\1.18\commons-compress-1.18.jar;D:\Maven\repository\com\github\virtuald\curvesapi\1.04\curvesapi-1.04.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-web\2.7.18\spring-boot-starter-web-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter\2.7.18\spring-boot-starter-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-logging\2.7.18\spring-boot-starter-logging-2.7.18.jar;D:\Maven\repository\ch\qos\logback\logback-classic\1.2.12\logback-classic-1.2.12.jar;D:\Maven\repository\ch\qos\logback\logback-core\1.2.12\logback-core-1.2.12.jar;D:\Maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\Maven\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\Maven\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\Maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Maven\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-json\2.7.18\spring-boot-starter-json-2.7.18.jar;D:\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.5\jackson-datatype-jdk8-2.13.5.jar;D:\Maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.5\jackson-module-parameter-names-2.13.5.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.18\spring-boot-starter-tomcat-2.7.18.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.83\tomcat-embed-core-9.0.83.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.83\tomcat-embed-el-9.0.83.jar;D:\Maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.83\tomcat-embed-websocket-9.0.83.jar;D:\Maven\repository\org\springframework\spring-web\5.3.31\spring-web-5.3.31.jar;D:\Maven\repository\org\springframework\spring-beans\5.3.31\spring-beans-5.3.31.jar;D:\Maven\repository\org\springframework\spring-webmvc\5.3.31\spring-webmvc-5.3.31.jar;D:\Maven\repository\org\springframework\spring-aop\5.3.31\spring-aop-5.3.31.jar;D:\Maven\repository\org\springframework\spring-context\5.3.31\spring-context-5.3.31.jar;D:\Maven\repository\org\springframework\spring-expression\5.3.31\spring-expression-5.3.31.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.1\spring-cloud-starter-bootstrap-3.1.1.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter\3.1.1\spring-cloud-starter-3.1.1.jar;D:\Maven\repository\org\springframework\security\spring-security-rsa\1.0.10.RELEASE\spring-security-rsa-1.0.10.RELEASE.jar;D:\Maven\repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;D:\Maven\repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar;D:\Maven\repository\org\springframework\boot\spring-boot-starter-actuator\2.7.18\spring-boot-starter-actuator-2.7.18.jar;D:\Maven\repository\io\micrometer\micrometer-core\1.9.17\micrometer-core-1.9.17.jar;D:\Maven\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\Maven\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\Maven\repository\com\google\guava\guava\20.0\guava-20.0.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.0.1.0\spring-cloud-starter-alibaba-nacos-discovery-2021.0.1.0.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.0.1.0\spring-cloud-alibaba-commons-2021.0.1.0.jar;D:\Maven\repository\com\alibaba\nacos\nacos-client\1.4.2\nacos-client-1.4.2.jar;D:\Maven\repository\com\alibaba\nacos\nacos-common\1.4.2\nacos-common-1.4.2.jar;D:\Maven\repository\commons-io\commons-io\2.7\commons-io-2.7.jar;D:\Maven\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;D:\Maven\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;D:\Maven\repository\com\alibaba\nacos\nacos-api\1.4.2\nacos-api-1.4.2.jar;D:\Maven\repository\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;D:\Maven\repository\io\prometheus\simpleclient\0.15.0\simpleclient-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_otel\0.15.0\simpleclient_tracer_otel-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_common\0.15.0\simpleclient_tracer_common-0.15.0.jar;D:\Maven\repository\io\prometheus\simpleclient_tracer_otel_agent\0.15.0\simpleclient_tracer_otel_agent-0.15.0.jar;D:\Maven\repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-commons\3.1.1\spring-cloud-commons-3.1.1.jar;D:\Maven\repository\org\springframework\security\spring-security-crypto\5.7.11\spring-security-crypto-5.7.11.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-context\3.1.1\spring-cloud-context-3.1.1.jar;D:\Maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.0.1.0\spring-cloud-starter-alibaba-nacos-config-2021.0.1.0.jar;D:\Maven\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;D:\Maven\repository\org\apache\hive\hive-jdbc\2.1.1-cdh6.3.2\hive-jdbc-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\apache\hive\hive-service-rpc\2.1.1-cdh6.3.2\hive-service-rpc-2.1.1-cdh6.3.2.jar;D:\Maven\repository\org\springframework\boot\spring-boot-devtools\2.7.18\spring-boot-devtools-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot\2.7.18\spring-boot-2.7.18.jar;D:\Maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.18\spring-boot-autoconfigure-2.7.18.jar;D:\Maven\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\Maven\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\Maven\repository\net\bytebuddy\byte-buddy\1.12.23\byte-buddy-1.12.23.jar;D:\Maven\repository\org\springframework\spring-core\5.3.31\spring-core-5.3.31.jar;D:\Maven\repository\org\springframework\spring-jcl\5.3.31\spring-jcl-5.3.31.jar;D:\Maven\repository\com\alibaba\fastjson\1.2.83\fastjson-1.2.83.jar;D:\Maven\repository\com\belerweb\pinyin4j\2.5.1\pinyin4j-2.5.1.jar;D:\Maven\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;D:\Maven\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;D:\Maven\repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;D:\Maven\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\Maven\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\Maven\repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;D:\Maven\repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-starter-openfeign\3.1.1\spring-cloud-starter-openfeign-3.1.1.jar;D:\Maven\repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.1\spring-cloud-openfeign-core-3.1.1.jar;D:\Maven\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\Maven\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\Maven\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;D:\Maven\repository\io\github\openfeign\feign-core\11.8\feign-core-11.8.jar;D:\Maven\repository\io\github\openfeign\feign-slf4j\11.8\feign-slf4j-11.8.jar com.hy.ifs.hive.HiveApplication 09:26:58.279 [Thread-1] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@1aeeb99d 2025-09-17 09:26:59.316 INFO 18976 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.18) 2025-09-17 09:27:03.284 WARN 18976 --- [ restartedMain] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[null.properties] & group[DEFAULT_GROUP] 2025-09-17 09:27:03.286 INFO 18976 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-null.properties,DEFAULT_GROUP'}] 2025-09-17 09:27:03.292 INFO 18976 --- [ restartedMain] com.hy.ifs.hive.HiveApplication : No active profile set, falling back to 1 default profile: "default" 2025-09-17 09:27:04.534 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-09-17 09:27:04.534 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-09-17 09:27:04.628 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 79 ms. Found 3 JPA repository interfaces. 2025-09-17 09:27:04.641 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-09-17 09:27:04.642 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2025-09-17 09:27:04.660 INFO 18976 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.CustomerRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 09:27:04.661 INFO 18976 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.DirectionCodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 09:27:04.661 INFO 18976 --- [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.hy.ifs.hive.repositorites.DirectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository 2025-09-17 09:27:04.661 INFO 18976 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9 ms. Found 0 Redis repository interfaces. 2025-09-17 09:27:04.917 INFO 18976 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=3c4e86c4-1dd9-3a09-904c-7500e21d04b4 2025-09-17 09:27:05.685 INFO 18976 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-09-17 09:27:05.686 INFO 18976 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.4]. 2025-09-17 09:27:05.686 INFO 18976 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true]. 2025-09-17 09:27:05.686 INFO 18976 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 2025-09-17 09:27:05.693 INFO 18976 --- [ restartedMain] o.a.catalina.core.AprLifecycleListener : OpenSSL successfully initialized [OpenSSL 3.0.14 4 Jun 2024] 2025-09-17 09:27:05.704 INFO 18976 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-09-17 09:27:05.704 INFO 18976 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83] 2025-09-17 09:27:05.955 INFO 18976 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-09-17 09:27:05.955 INFO 18976 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2644 ms 2025-09-17 09:27:06.312 INFO 18976 --- [ restartedMain] org.apache.hive.jdbc.Utils : Supplied authorities: cdh50:10000 2025-09-17 09:27:06.313 INFO 18976 --- [ restartedMain] org.apache.hive.jdbc.Utils : Resolved authority: cdh50:10000 2025-09-17 09:27:06.314 ERROR 18976 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error java.lang.NoClassDefFoundError: org/apache/thrift/TEnum at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_431] at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[na:1.8.0_431] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_431] at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[na:1.8.0_431] at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[na:1.8.0_431] at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[na:1.8.0_431] at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[na:1.8.0_431] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_431] at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:154) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1657) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1393) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1389) [druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:100) [druid-1.2.6.jar:1.2.6] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:332) [spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:164) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:143) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:103) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:131) [spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:633) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1168) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:919) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.18.jar:2.7.18] at com.hy.ifs.hive.HiveApplication.main(HiveApplication.java:11) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-2.7.18.jar:2.7.18] Caused by: java.lang.ClassNotFoundException: org.apache.thrift.TEnum at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] ... 63 common frames omitted 2025-09-17 09:27:06.317 WARN 18976 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/thrift/TEnum 2025-09-17 09:27:06.317 INFO 18976 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ... 2025-09-17 09:27:06.317 INFO 18976 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed 2025-09-17 09:27:06.320 INFO 18976 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2025-09-17 09:27:06.341 INFO 18976 --- [ restartedMain] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-09-17 09:27:06.384 ERROR 18976 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/thrift/TEnum at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:633) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1168) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:919) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar:5.3.31] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) [spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) [spring-boot-2.7.18.jar:2.7.18] at com.hy.ifs.hive.HiveApplication.main(HiveApplication.java:11) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) [spring-boot-devtools-2.7.18.jar:2.7.18] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/thrift/TEnum at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.31.jar:5.3.31] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-5.3.31.jar:5.3.31] ... 24 common frames omitted Caused by: java.lang.NoClassDefFoundError: org/apache/thrift/TEnum at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_431] at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[na:1.8.0_431] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_431] at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[na:1.8.0_431] at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[na:1.8.0_431] at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[na:1.8.0_431] at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[na:1.8.0_431] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_431] at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:154) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) ~[hive-jdbc-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1657) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1393) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1389) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:100) ~[druid-1.2.6.jar:1.2.6] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:332) ~[spring-jdbc-5.3.31.jar:5.3.31] at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:164) ~[spring-boot-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:143) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:103) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:131) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.7.18.jar:2.7.18] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_431] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_431] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_431] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_431] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.31.jar:5.3.31] ... 25 common frames omitted Caused by: java.lang.ClassNotFoundException: org.apache.thrift.TEnum at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_431] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[na:1.8.0_431] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_431] ... 63 common frames omitted 2025-09-17 09:27:06.401 WARN 18976 --- [ Thread-7] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 进程已结束,退出代码0
最新发布
09-18
<think> 我们正在解决Spring Boot项目中使用Hive JDBC 2.1.1-cdh6.3.2连接Hive时出现的java.lang.NoClassDefFoundError: org/apache/thrift/TEnum异常。 根据之前的讨论,我们知道Hive JDBC 2.1.1-cdh6.3.2适配的Thrift版本是0.9.3。而TEnum接口是在Thrift 0.9.0版本中引入的,因此0.9.3版本肯定包含TEnum。 但是,现在出现NoClassDefFoundError: TEnum,说明在运行时类路径中找不到这个类。可能的原因有: 1. 项目中没有引入Thrift库,或者引入的版本过低(低于0.9.0)。 2. 项目中引入了多个Thrift版本,发生了版本冲突,导致实际加载的版本过低。 3. 依赖作用域(scope)问题,比如使用了test scope,导致运行时不可用。 解决步骤: 1. 确保添加了正确版本的Thrift依赖(0.9.3),并且作用域为compile(默认就是compile,所以不用特别指定)。 2. 排除冲突的Thrift版本。 根据引用[3]中提到的类似问题(TException找不到),这通常也是由于缺少Thrift依赖或版本冲突引起。 因此,我们需要: 1. 在项目的pom.xml中添加正确的Thrift依赖(版本0.9.3)。 2. 检查依赖树,排除其他可能引入的旧版本Thrift。 具体操作: 步骤1:添加Thrift 0.9.3依赖 ```xml <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.3</version> </dependency> ``` 步骤2:使用Maven命令检查依赖树,排除冲突 执行命令:`mvn dependency:tree`,查看是否有多版本的Thrift。如果有,在引入该依赖的地方排除掉。 例如,如果发现其他依赖传递引入了不同版本的Thrift,可以这样排除: ```xml <dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <version>version</version> <exclusions> <exclusion> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> </exclusion> </exclusions> </dependency> ``` 步骤3:如果问题仍然存在,可以考虑将Thrift依赖放在更优先的位置(比如在pom文件中更靠前的位置),或者使用`<dependencyManagement>`锁定版本。 另外,引用[1]、[2]、[4]、[5]提到了其他可能缺失的依赖,例如commons-configuration、hadoop-common等。虽然当前报错是TEnum,但建议同时检查这些依赖是否已经正确引入,因为Hive JDBC运行还需要这些依赖。 因此,建议同时添加以下依赖(版本根据CDH 6.3.2对应的Hadoop版本和Hive版本选择): - hadoop-common: CDH 6.3.2对应的Hadoop版本是2.6.0-cdh6.3.2,但注意Maven仓库中可能没有cdh6.3.2的hadoop-common,所以通常需要从CDH仓库获取,或者使用Cloudera的仓库。 - commons-configuration: 1.6(如引用[1]) 由于CDH的依赖在公共仓库可能没有,我们需要配置Cloudera仓库: ```xml <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories> ``` 然后添加Hadoop和Hive相关依赖(注意使用CDH版本): 对于hadoop-common: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0-cdh6.3.2</version> </dependency> ``` 但是注意:Hive JDBC驱动本身可能已经传递依赖了hadoop-common,所以可能不需要显式引入。但如果版本不匹配或者传递依赖的版本不对,就需要显式引入并排除冲突。 综上所述,完整的解决方案是: 1. 添加Thrift 0.9.3依赖。 2. 添加必要的其他依赖(如commons-configuration:1.6,hadoop-common等)并排除冲突。 3. 配置Cloudera仓库。 如果问题仍然存在,请检查是否因为打包(比如Spring Boot的fat jar)时没有包含这些依赖,或者重复包含导致冲突。可以使用`mvn dependency:tree`仔细分析依赖关系。 最后,关于TEnum,它是Thrift生成的枚举类型的基接口。如果Hive JDBC中使用了Thrift生成的枚举,而运行时没有TEnum,就会报错。因此,确保Thrift 0.9.3在类路径中是关键。 </think> 针对您在Spring Boot项目中使用Hive JDBC 2.1.1-cdh6.3.2连接Hive时出现的`java.lang.NoClassDefFoundError: org/apache/thrift/TEnum`异常,以下是系统性的解决方案: ### 问题分析与解决方案 #### 1. **添加正确的Thrift依赖** 此错误表明缺少Thrift库中的`TEnum`接口。请确保在`pom.xml`中添加以下依赖: ```xml <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.3</version> <!-- CDH 6.3.2兼容版本 --> </dependency> ``` **验证方式**:执行`mvn dependency:tree | grep libthrift`确认版本为0.9.3[^1][^3] #### 2. **排除冲突的Thrift版本** 若项目间接引入其他Thrift版本(如0.13.x),需显式排除: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.1.1-cdh6.3.2</version> <exclusions> <!-- 排除高版本Thrift --> <exclusion> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. **添加Hadoop公共库依赖** `TEnum`缺失常伴随Hadoop依赖问题,添加: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0-cdh6.3.2</version> <!-- 匹配CDH版本 --> </dependency> ``` > 注意:CDH依赖需配置Cloudera仓库: > ```xml > <repository> > <id>cloudera</id> > <url>https://repository.cloudera.com/artifactory/cloudera-repos</url> > </repository> > ```[^5] #### 4. **验证依赖树完整性** 检查其他关键依赖是否缺失: ```xml <!-- Commons配置库 --> <dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> <version>1.10</version> <!-- 解决Configuration缺失 --> </dependency> <!-- Commons Lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> <!-- 解决StringUtils缺失 --> </dependency> ```[^1][^4] ### 故障排查流程 1. **清理并重建项目**: ```bash mvn clean install -U ``` 2. **检查依赖冲突**: ```bash mvn dependency:tree -Dincludes=org.apache.thrift ``` 3. **验证类加载**: 在Spring Boot启动类添加检查: ```java @PostConstruct public void checkThriftClasses() { try { Class.forName("org.apache.thrift.TEnum"); } catch (ClassNotFoundException e) { throw new RuntimeException("TEnum class missing!", e); } } ``` > **关键提示**:CDH组件的依赖必须保持版本一致,避免混合使用不同CDH版本的库[^2][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值