SpringBoot集成Elastic-job依赖注入bean失败

2023-11-04

SpringBoot集成Elastic-job踩坑之依赖注入失败java.lang.ClassNotFoundException: org.apache.curator.connection.StandardConnectionHandlingPolicy

前言

        最近在工作中,需要用到分布式任务调度,在网上找了一下相关的资料,有很多比较优秀的开源框架,比如xxl-job,elastic-job等等。最后选择了elastic-job。

        这篇博客记录一下我自己在工作中使用elastic-job遇见的问题,在网上找了很久,关于这方面的博客感觉讲的不是很全面,索性自己写一篇博客,记录一下,希望对大家有所帮助。

错误信息(这是我项目启动时候的错误信息,我去掉了些没用的错误信息。)

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'elasticJobHandler': Unsatisfied dependency expressed through field 'regCenter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'regCenter' defined in class path resource [com/pokong/order/job/elastic/ElasticJobConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/apache/curator/connection/StandardConnectionHandlingPolicy

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'regCenter' defined in class path resource [com/pokong/order/job/elastic/ElasticJobConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/apache/curator/connection/StandardConnectionHandlingPolicy
	at 
Caused by: java.lang.NoClassDefFoundError: org/apache/curator/connection/StandardConnectionHandlingPolicy

com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter.init(ZookeeperRegistryCenter.java:72)

Caused by: java.lang.ClassNotFoundException: org.apache.curator.connection.StandardConnectionHandlingPolicy

 

总结一下错误原因:Spring容器在初始化bean对象时,说找不到我的这个regCenter(Zoopeeker注册中心)Bean对象

 

 

这是我的regCenter(Zoopeeker注册中心),我确确实实已经注入了,我看了好几遍,还打了debug程序,确实注入成功了,但是程序依然报错,排除掉程序问题,然后问题就在依赖上面

 

 

排查依赖问题

这是我pom里面引入的elastic-job两个依赖

第一步:先在网上找资料,看看有沒有哥们碰见过这个问题,找到相关的博客全部都是说Curator依赖版本太高的原因(我都还没明白Curator是什么东西,我心里在想,我是找elastic-job,怎么说这玩意版本高,找了好几个博客都是这样说,我只好去扫扫盲,原来Curator是Apache下开源的一个比较完善的ZooKeeper客户端框架,我当时就明白了,因为elastic-job的注册中心是基于zookeeper,所以elasticjob里面也有这玩意的依赖)

 

第二步: 跟着网上大佬的说法,加入两个maven依赖,降低Curator的版本,结果还是程序没报依赖注入失败的原因了,报了另外一个错误。。。。

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.10.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.10.0</version>
</dependency>

人都傻了,这bug一个接着一个,报错异常是跟这个 com/google/guava/guava/28.2-android/guava-28.2-android.jar 有关系

 

通过研究elastic-job 的maven依赖发现,的确是有guava这个jar , 跟curator包是同一级目录,我在想,curator之前是因为版本过高,这个guava是不是也是因为版本过高

然后把guava的版本依赖指定到18.0,程序就能正常运行了

最后总结

因为elastic-job 2.1.5的依赖下curator,guava版本过高,所以导致程序不能正常运行,加上这三个依赖就好了

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot集成Elastic-job依赖注入bean失败 的相关文章

随机推荐