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无法刷新的资料请关注脚本之家其它相关文章!

相关文章

  • Java中FileWriter的用法及wirte()重载方法详解

    Java中FileWriter的用法及wirte()重载方法详解

    这篇文章主要介绍了Java中FileWriter的用法及wirte()重载方法详解,FileWriter是Java编程语言中的一个类,用于将字符写入文件,它提供了一种简单而方便的方式来创建、打开和写入文件,通过使用FileWriter,我们可以将字符数据写入文本文件,需要的朋友可以参考下
    2023-10-10
  • Resttemplate中设置超时时长方式

    Resttemplate中设置超时时长方式

    这篇文章主要介绍了Resttemplate中设置超时时长方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • redis与spring整合使用的步骤实例教程

    redis与spring整合使用的步骤实例教程

    这篇文章主要给大家介绍了关于redis与spring整合使用的相关资料,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • maven实现jar包导入+导出方式

    maven实现jar包导入+导出方式

    这篇文章主要介绍了maven实现jar包导入+导出方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 解决使用mybatis取值,字段赋值错误的问题

    解决使用mybatis取值,字段赋值错误的问题

    这篇文章主要介绍了解决使用mybatis取值,字段赋值错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 闲言碎语-逐步了解Spring

    闲言碎语-逐步了解Spring

    这篇文章主要介绍了闲言碎语-逐步了解Spring,涉及Spring的诞生,简介,作用等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java使用NIO优化IO实现文件上传下载功能

    Java使用NIO优化IO实现文件上传下载功能

    IO 是基于流来读取的,而NIO则是基于块读取,面向流 的 I/O 系统一次一个字节地处理数据,这篇文章主要介绍了Java使用NIO优化IO实现文件上传下载功能,需要的朋友可以参考下
    2022-07-07
  • Java基础之简单的图片处理

    Java基础之简单的图片处理

    这篇文章主要介绍了Java基础之简单的图片处理,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring依赖注入方式(Dependency Injection)

    Spring依赖注入方式(Dependency Injection)

    在实际开发中,推荐使用构造器注入而非字段注入,原因包括官方推荐、代码简洁、安全性高和易于测试,构造器注入通过在对象创建时注入所有必需的依赖,避免运行时忘记注入的问题,且利用Lombok的@RequiredArgsConstructor可自动生成构造函数
    2024-10-10
  • SpringMVC 中文乱码的解决方案

    SpringMVC 中文乱码的解决方案

    这篇文章主要介绍了SpringMVC 中文乱码的解决方案,帮助大家更好的理解和学习使用SpringMVC,感兴趣的朋友可以了解下
    2021-04-04

最新评论