spring-data-elasticsearch.4.2.0 jar包冲突导致:StackOverflow

news2024/11/17 5:23:19

最近要求es做升级改造:

目前版本:
1. springframework   4.3.3-RELEASE
2. spring-data-elasticsearch: 2.0.3
3. elasticsearch: 2.4.0
4. 工具类: ElasticsearchTemplate 

升级后ES版本7.10.0

1. springframework  升级到 5.3.10
2. spring-data-elasticsearch 升级到  4.2.0
3. elasticsearch 升级到  7.10.0
4. 升级Es7后, ElasticsearchTemplate 过期不能使用, 使用ElasticsearchRestTemplate, 修改增删查改语法

因为项目不是spring-boot项目, 是spring项目, 所以:

1. 首先引入jar包:

<!--elasticsearch-->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-elasticsearch</artifactId>
			<version>4.2.0</version>
		</dependency>

2. 将spring.framework相关的jar包都升级到5.3.10:

<!--spring jar-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>5.3.10</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.10</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>5.3.10</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>5.3.10</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>5.3.10</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>5.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>5.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>5.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.3.10</version>
			<scope>test</scope>
		</dependency>
		<!-- spring jar end-->

3. 创建EsConfig配置文件: 

package com.haier.camelot.cdk.base.conf;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import springfox.documentation.spring.web.json.Json;

import javax.xml.bind.util.JAXBSource;

@Slf4j
@Configuration
public class EsConfig extends AbstractElasticsearchConfiguration {
    @Value("#{app.esUrl}")
    private String esUrl;
    @Value("#{app.esUrlPort}")
    private int esUrlPort;
    @Value("#{app.esUsername}")
    private String esUsername;
    @Value("#{app.esPwd}")
    private String esPwd;

    private static final String HTTP_SCHEME = "http";


    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPwd));
        // 设置认证信息:
        // 通过builder创建rest client,配置http client的HttpClientConfigCallback。
        // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。
        RestClientBuilder builder = RestClient.builder(new HttpHost(esUrl, esUrlPort, HTTP_SCHEME))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }

    //获取ElasticsearchRestTemplate模板对象, 后面增删查改都是通过ElasticsearchRestTemplate 
    @Bean
    public ElasticsearchRestTemplate elasticsearchRestTemplate(){
        RestHighLevelClient client = elasticsearchClient();
        return new ElasticsearchRestTemplate(client);
    }


}

4. 改造增删查改方法: 以下简单列出

@Test
    public void saveTest(){
        WdRefusedOrderInfoToEs insert = new WdRefusedOrderInfoToEs();
        insert.setId("111");
        insert.setOrderId("A002");
        WdRefusedOrderInfoToEs s = elasticsearchRestTemplate.save(insert);
        System.out.println(s);
    }

    @Test
    public void deleteTest(){
        WdRefusedOrderInfoToEs inset = new WdRefusedOrderInfoToEs();
        inset.setId("111");
        inset.setOrderId("A001");
        //WdRefusedOrderInfoToEs save = elasticsearchRestTemplate.save(inset);
        String delete = elasticsearchRestTemplate.delete(inset);
        System.out.println(delete);
    }

    @Test
    public void updateTest(){
        WdRefusedOrderInfoToEs update = new WdRefusedOrderInfoToEs();
        update.setId("OYADI21030900002-0802ebc5");
        update.setCreatedBy("JYB");
        //创建文档对象
        Document document = Document.create();
        document.put("createdBy", update.getCreatedBy());
        //创建更新查询
        UpdateQuery updateQuery = UpdateQuery.builder(update.getId()).withDocument(document) .withScriptedUpsert(true) .build();
        UpdateResponse up = elasticsearchRestTemplate.update(updateQuery, IndexCoordinates.of("doc_name"));
        System.out.println(up);
    }  

以上删除, 更新都正常, 但是save方法一直失败, 报错像是跟jackson有关的无线递归循环:  StackOverflow

浪费了好几天没看出问题, 后来找了架构组的同事, 一眼看出是jackson相关jar包缺失, 

到spring-data-elasticsearch.4.2.0的.m2下找到pom文件, 分析了一下该包的依赖:

C:\Users\Haier\.m2\repository\org\springframework\data\spring-data-elasticsearch\4.2.0>mvn dependency:tree

分析因为的jackson相关包,  发现我们的项目里jackson-databind版本引入是2.12.3,  而因为引用的parent里面写死的版本是2.3.2, 导致版本不匹配, 所以显示在pom里引入一下, 覆盖点以前的版本

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.12.3</version>
</dependency>

save也成功了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

热门bi报表软件推荐,哪款bi报表软件更功能更强大?

随着商业智能&#xff08;BI&#xff09;的不断发展和应用&#xff0c;越来越多的企业开始关注和使用BI报表软件。但是在众多的BI报表软件中&#xff0c;如何选择一款既功能强大又易于使用的软件&#xff0c;成为了许多企业和个人面临的难题。下面将为大家介绍5款热门的BI报表软…

爆肝百万字;学完这些你的python就无敌了

前言 最近高考刚刚结束&#xff0c;不少大学也快陆陆续续的要放暑假了&#xff0c;不少人表示暑假想学点python知识&#xff0c;或提升下自己&#xff0c;或打算学点技术兼职赚点零花钱&#xff0c;于是肝了一份Python最新学习文档总结资料 &#xff1a;全文档1378页&#xff…

Python的离线安装

原文链接 在没有外网的情况下&#xff0c;安装Python环境只能采用离线方式。 Windows离线安装Python Python离线安装包的下载地址&#xff1a;https://www.python.org/ftp/python/ 我选择的是&#xff1a;python-3.8.5-amd64.exe 双击运行安装包即可完成安装。 安装完成后…

简化本地Feign调用

在平常的工作中&#xff0c;OpenFeign作为微服务间的调用组件使用的非常普遍&#xff0c;接口配合注解的调用方式突出一个简便&#xff0c;让我们能无需关注内部细节就能实现服务间的接口调用。 但是工作中用久了&#xff0c;发现 Feign 也有些使用起来麻烦的地方&#xff0c;…

【Haproxy 搭建Web 群集】

目录 一、Haoroxy 基础了解1、常见的Web集群调度器2、Haproxy 应用分析 二、Haproxy 调度算法原理三、HAProxy的主要特性四、HAProxy负载均衡策略五、LVS、Nginx、HAproxy的区别1、Nginx的优点&#xff0c;缺点2、LVS的优点和缺点3、HAProxy的优点 六、Haproxy搭建 Web 群集实验…

跟着LearnOpenGL学习8--摄像机

文章目录 一、前言二、摄像机/观察空间2.1、摄像机位置2.2、摄像机方向2.3、右轴2.4、上轴2.5、LookAt2.6、LookAt测试 三、自由移动3.1、移动速度 四、视角移动4.1、欧拉角 五、鼠标输入5.1、缩放 六、摄像机类 一、前言 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵…

【软考系统架构师】进程与线程、并发和并行的理解

进程和线程的概念是软考里经常出现的概念&#xff0c;也是计算机领域的基础概念之一&#xff0c;看到一套非常形象的进程和线程的解释&#xff0c;记录一下 CPU 相当于一个工厂的能源核心&#xff0c;它一直运行&#xff0c;并向外提供动力。 什么是进程 但是这家工厂资金有限&…

A*算法与八数码问题(numpy)

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。 目录 一、引言 二、思路 1. 确定问题和目标&#xff1a; 2. 确定算法和数据结构&#xff1a; 3. 编写代码框架 4. 实现辅助函数&#xff1…

CreateML 使用以及机器学习基础概念

1. 前言 在学习 CreateML 之前&#xff0c;我们先了解一下什么是机器学习&#xff1f;目前还不存在被广泛认可的定义来准确定义机器学习是什么。第一个机器学习的定义来自于Arthur Samuel。他定义机器学习为&#xff0c;在进行特定编程的情况下&#xff0c;给予计算机学习能力…

C语言-类型转换

数据有不同的类型&#xff0c;不同类型数据之间进行混合运算时必然涉及到类型的转换问题. 转换的方法有两种&#xff1a; 自动转换: 遵循一定的规则,由编译系统自动完成. 强制类型转换&#xff1a; 把表达式的运算结果强制转换成所需的数据类型 1 自动转换 自动转换原则 …

阿里人手一本的Java性能调优手册,几乎涵盖了性能优化的所有操作

说起性能调优&#xff0c;想必大家都知道&#xff0c;但是就是没怎么用过&#xff0c;所以在Java性能优化上面临着很多的困扰&#xff0c;比如&#xff1a; 能力修炼中&#xff0c;由于常年接触 CRUD&#xff0c;缺乏高并发这一实践环境&#xff0c;对“性能优化”只能通过理论…

剑指 Offer 59 - I: 滑动窗口的最大值

第一眼看这个感觉思路没啥大问题&#xff0c;就是一个大循环不断后移&#xff0c;然后小循环维护一个k长度的队列。注意peekFirst和peekLast的使用&#xff0c;双端队列可以打破先进先出或者先进后出的局限性&#xff0c;因此peek没有默认值&#xff0c;得加上First或者Last来进…

干货 | 腾讯云李滨:云时代数据安全治理方法与实践

作者&#xff1a;李滨‍‍‍‍本文约2600字&#xff0c;建议阅读8分钟 本文与你分享腾旭在数据安全和人工智能的安全治理方法&#xff0c;以及实践上的一些经验。 今天很荣幸与大家分享在过去几年以内&#xff0c;腾讯在数据安全和人工智能的安全治理方法&#xff0c;以及实践上…

使用服务器的妙妙工具

为什么使用服务器&#xff1f; 一台电脑的性能终究是有限的&#xff0c;所以当计算量太大时&#xff0c;我们可以借助服务器&#xff0c;它的运算速度快&#xff0c;存储空间大。 和个人电脑不同&#xff0c;服务器通常由一个管理员进行管理&#xff0c;而有多用户同时使用。…

一行代码实现网页直接跳转抖音,2023年6月新方法

之前 发的文章 方法已经失效&#xff0c;以下为新版本方案&#xff01; 背景 大家可能都发现在一些APP中无法直接打开抖音的链接&#xff0c;就连抖音官方的分享链接在浏览器打开都无法直接唤醒APP。需要我们手动点击&#xff0c;如果我们在自己网站等推广希望直接拉起抖音可…

工厂方法模式(五)

过气的&#xff0c;终究是过气了 上一章简单介绍了工厂模式(四), 如果没有看过,请观看上一章 一.工厂方法模式 工厂方法模式&#xff0c;通过定义工厂父类负责定义创建对象的公共接口&#xff0c;而子类则负责生成具体的对象。 将类的实例化&#xff08;具体产品的创建&…

全网最火爆,性能测试基本原则方法总结,再不卷就被淘汰了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试关键点 …

2023 年牛客网最新版大厂 Java 八股文面试题总结(覆盖所有面试题考点)

序员真的是需要将终生学习贯彻到底的职业&#xff0c;一旦停止学习&#xff0c;离被淘汰&#xff0c;也就不远了。 金九银十跳槽季&#xff0c;这是一个千年不变的话题&#xff0c;每到这个时候&#xff0c;很多人都会临阵磨枪&#xff0c;相信不快也光。于是&#xff0c;大家…

什么是Vue的数据流(单向数据流)?如何进行数据流管理

什么是Vue的数据流&#xff08;单向数据流&#xff09;&#xff1f;如何进行数据流管理 在Vue中&#xff0c;数据流是指数据的传递和管理方式。Vue采用的是单向数据流&#xff0c;也就是说&#xff0c;数据是从父组件流向子组件&#xff0c;子组件不能直接修改父组件的数据。本…

夏季来临居民如何预防电气火灾隐患

安科瑞虞佳豪 居住场所预防电气火患 请注意以下几点 1.用具有生产许可证或CCC证书并与居住场所的环境相适应的电气线路以及插座、插线板、充电器、用电设备等电器产品&#xff1b; 2.不私自拉接电气线路&#xff1b;不随意更改电气线路保护装置&#xff1b; 3.不随意更换原…