Springboot连接elasticsearch maven项目指定自动导入的依赖项的版本号

有时候为了保持服务器端和客户端版本号的一致,避免版本冲突问题,在pom.xml中需要指定某些依赖项的版本。

服务器端 的环境:elasticsearch:5.4.1,Lucene:6.5.1

而当使用了如下属性:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 在引入下面这个依赖时,

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.4.1</version>
        </dependency>

会自动导入大量相关的依赖项,主要是涉及Lucene和elasticsearch的,注意观察版本,如图所示:

导致无法连接上es,在调试中遇到的异常列表如下:

1. org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{H-qMbJOUG2f-yCcCw}{*.*.*.104}{*.*.*.104:9200}, {#transport#-2}{_XOQ8xY8QT-aamw}{*.*.*.105}{*.*.*.105:9200}, {#transport#-3}{QDUMocgQ8N2mF89w}{*.*.*.106}{*.*.*.106:9200}]
	at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347) ~[elasticsearch-5.6.11.jar:5.6.11]
	at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245) ~[elasticsearch-5.6.11.jar:5.6.11]

	原因:引入的es版本跟服务器es版本不一致;java连接es端口为9300
	
2. failed to get local cluster state for {#transport#-3}{agOeB-c3TSs3GI7pw}{*.*.*.106}{*.*.*.106:9300}, disconnecting...
	org.elasticsearch.transport.RemoteTransportException: [name-106][*.*.*.106:9300][cluster:monitor/state]
	Caused by: java.io.EOFException: tried to read: 60 bytes but only 9 remaining
	
3. ception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'indexController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transportClient' defined in class path resource [com/example/demo/config/EsConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'transportClient' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/lucene/util/SetOnce
	原因:Lucene版本冲突,注意依赖的版本是否有多个;缺少Lucene-core包

4. java.lang.AbstractMethodError: org.elasticsearch.transport.TcpTransport.connectToChannels(Lorg/elasticsearch/cluster/node/DiscoveryNode;Lorg/elasticsearch/transport/ConnectionProfile;)Lorg/elasticsearch/transport/TcpTransport$NodeChannels;
	原因: elasticsearch版本冲突

所以在查看了很多博客之后,发现,可以通过给pom.xml的<properties>指定这些自动引入的依赖项的版本:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--指定自动导入的依赖项的版本,目前平台的es版本为5.4.1,lucene版本为6.5.1-->
        <java.version>1.8</java.version>
        <lucene.version>6.5.1</lucene.version>
        <elasticsearch.version>5.4.1</elasticsearch.version>
    </properties>

测试,连接成功。

补充:

1. spring-boot-starter-parent 自动引入的依赖项默认的版本名称以及版本号可以到目录

.m2\repository\org\springframework\boot\spring-boot-dependencies\2.0.1.RELEASE\spring-boot-dependencies-2.0.1.RELEASE.pom 中查看。

2. 每次更新了maven依赖最好reimport,避免项目中依赖更新的不及时而耗费不必要的时间去调试异常。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值