Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例

 更新时间:2023年08月29日 10:22:27   作者:TinyThing  
这篇文章主要为大家介绍了Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

在项目中用到了Spring Data ElasticSearch,最近更新到了最新版本5.0.x,在数据插入、修改、删除后,紧接着进行查询发现数据并未更新;

解决方法

研究后发现是新版本的spring data es默认的刷新策略是null,代码如下:

        @Bean
        @ConditionalOnMissingBean(value = ElasticsearchOperations.class, name = "elasticsearchTemplate")
        @ConditionalOnBean(ElasticsearchClient.class)
        ElasticsearchTemplate elasticsearchTemplate(ElasticsearchClient client, ElasticsearchConverter converter) {
            return new ElasticsearchTemplate(client, converter);
        }

这里没有给ElasticsearchTemplate设置refreshPolicy属性,点进AbstractElasticsearchTemplate可以看到默认为null,而以前默认是立即刷新IMMEDIATE。

查看Spring官网发现

Refresh configuration

When configuring Spring Data Elasticsearch like described in Elasticsearch Clients by using ElasticsearchConfigurationSupport, AbstractElasticsearchConfiguration or AbstractReactiveElasticsearchConfiguration the refresh policy will be initialized to null. Previously the reactive code initialized this to IMMEDIATE, now reactive and non-reactive code show the same behaviour.

也就是说,对es数据库进行数据变更操作时,默认是按照索引自带的刷新策略(一般情况下是1s以后才会更新索引)

{
  "settings": {},
  "defaults": {
    "index": {
      "refresh_interval": "1s"
    }
  }
}

如果想要在Spring data es中更新数据后立即刷新,那么需要如下配置覆盖掉Springboot的Auto Configuration:

@Configuration
@EnableConfigurationProperties(ElasticsearchProperties.class)
public class ElasticsearchConfig extends ElasticsearchConfiguration {
    private final ElasticsearchProperties properties;
    public ElasticsearchConfig(ElasticsearchProperties properties) {
        this.properties = properties;
    }
    @NotNull
    @Override
    public ClientConfiguration clientConfiguration() {
        List<String> uris = properties.getUris();
        String[] uri = uris.toArray(new String[0]);
        return ClientConfiguration.builder()
                .connectedTo(uri)
                .withSocketTimeout(properties.getSocketTimeout())
                .withConnectTimeout(properties.getConnectionTimeout())
                .build();
    }
    @NotNull
    @Bean(name = { "elasticsearchOperations", "elasticsearchTemplate" })
    @Override
    public ElasticsearchOperations elasticsearchOperations(@NotNull ElasticsearchConverter elasticsearchConverter,
                                                           @NotNull ElasticsearchClient elasticsearchClient) {
        ElasticsearchTemplate template = new ElasticsearchTemplate(elasticsearchClient, elasticsearchConverter);
        template.setRefreshPolicy(RefreshPolicy.IMMEDIATE);
        return template;
    }
}

以上就是Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例的详细内容,更多关于Spring Data Elasticsearch无法刷新的资料请关注脚本之家其它相关文章!

相关文章

  • 关于spring项目中无法加载resources下文件问题及解决方法

    关于spring项目中无法加载resources下文件问题及解决方法

    在学习Spring过程中,TestContext框架试图检测一个默认的XML资源位置,再resources下创建了一个com.example的文件夹,执行时,报错,本文给大家介绍spring项目中无法加载resources下文件,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 使用Spring Cache时设置缓存键的注意事项详解

    使用Spring Cache时设置缓存键的注意事项详解

    在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​@CachePut​​、​​@CacheEvict​​等注解可以方便地实现缓存功能,本文给大家介绍了使用Spring Cache时设置缓存键的注意事项
    2025-01-01
  • springboot 集成activemq项目配置方法

    springboot 集成activemq项目配置方法

    这篇文章主要介绍了springboot 集成activemq项目配置方法,e-car项目配置通过引入activemq依赖,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 配置SpringBoot方便的切换jar和war的方法示例

    配置SpringBoot方便的切换jar和war的方法示例

    这篇文章主要介绍了配置SpringBoot方便的切换jar和war的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 如何用java计算两个时间相差多少小时

    如何用java计算两个时间相差多少小时

    最近工作中遇到需要计算时间差,下面这篇文章主要给大家介绍了关于如何用java计算两个时间相差多少小时的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Java生成Jar包方法步骤

    Java生成Jar包方法步骤

    在Java开发中,打包成JAR文件是一种常见的方式,本文主要介绍了Java生成Jar包方法步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • SpringBoot后端接收参数优化代码示例(统一处理前端参数)

    SpringBoot后端接收参数优化代码示例(统一处理前端参数)

    使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,下面这篇文章主要给大家介绍了关于SpringBoot后端接收参数优化(统一处理前端参数)的相关资料,需要的朋友可以参考下
    2024-07-07
  • Java运行时数据区概述详解

    Java运行时数据区概述详解

    这篇文章主要介绍了Java运行时数据区概述,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 一文了解Seata的实现原理

    一文了解Seata的实现原理

    随着业务发展,单体系统逐渐无法满足业务的需求,分布式架构逐渐成为大型互联网平台首选。伴随而来的问题是,本地事务方案已经无法满足,分布式事务相关规范和框架应运而生。本文主要介绍Seata的实现原理
    2021-06-06
  • 吊打Java面试官!整理了一周的Spring面试大全(附答案)

    吊打Java面试官!整理了一周的Spring面试大全(附答案)

    这篇文章主要介绍了Spring面试资料(附答案)建议收藏留存,学Java的小伙伴都知道Spring是面试的必问环节,看完了一天就可掌握数据结构和算法的面试题,快来看看吧
    2021-08-08

最新评论