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

相关文章

  • Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐)

    Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐)

    今天给大家带来一篇教程关于Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图的技能,包括环境配置及圆环图前端后端实现代码,感兴趣的朋友一起看看吧
    2021-06-06
  • 解决gateway报netty堆外内存溢出io.netty.util.internal.OutOfDirectMemoryError

    解决gateway报netty堆外内存溢出io.netty.util.internal.OutOfDirectMemor

    这篇文章主要介绍了解决gateway报netty堆外内存溢出io.netty.util.internal.OutOfDirectMemoryError,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中的ReentrantLock实现原理及代码演示

    Java中的ReentrantLock实现原理及代码演示

    这篇文章主要介绍了Java中的ReentrantLock实现原理及代码演示,非公平锁 如果已经进入队列,链表里面的线程是先进先出,如果已经释放了锁,在抢占锁时,链表里面的头结点和还没有入队列的线程抢锁,需要的朋友可以参考下
    2024-01-01
  • Java毕业设计实战之教室预订管理系统的实现

    Java毕业设计实战之教室预订管理系统的实现

    这是一个使用了java+SpringBoot+Maven+Vue+mysql开发的教室预订管理系统,是一个毕业设计的实战练习,具有教室预订管理该有的所有功能,感兴趣的朋友快来看看吧
    2022-02-02
  • java 将数据加载到内存中的操作

    java 将数据加载到内存中的操作

    这篇文章主要介绍了java 将数据加载到内存中的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Atomikos + MybatisPlus解决多数据源事务一致性问题解决

    Atomikos + MybatisPlus解决多数据源事务一致性问题解决

    在实际项目的开发过程中,我们经常会遇到在同一个项目或微服务中牵涉到使用两个或多个数据源的,本文主要介绍了Atomikos + MybatisPlus解决多数据源事务一致性问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • maven install报错中程序包xxx不存在的问题解决

    maven install报错中程序包xxx不存在的问题解决

    本文主要介绍了maven install报错中程序包xxx不存在的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Spring+quartz实现定时发送邮件功能实例

    Spring+quartz实现定时发送邮件功能实例

    spring提供的定时发送邮件功能一直深受广大web开发者的喜爱,这篇文章主要介绍了Spring+quartz实现定时发送邮件功能实例,有兴趣的可以了解一下。
    2017-03-03
  • Java中冒泡排序的原生实现方法(正序与逆序)

    Java中冒泡排序的原生实现方法(正序与逆序)

    这篇文章主要给大家介绍了关于Java中冒泡排序的原生实现方法(正序与逆序)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MyBatis typeHandler接口的定义和使用

    MyBatis typeHandler接口的定义和使用

    TypeHandler被称作类型处理器,MyBatis在设置预处理语句中的参数或从结果集中取出一个值时,都会用类型处理器将Java对象转化为数据库支持的类型或者将获取到数据库值以合适的方式转换成Java类型,感兴趣的同学可以参考下文
    2023-05-05

最新评论