Spring?Data?Elasticsearch?5.0.x修改數(shù)據(jù)后無(wú)法立即刷新解決方法示例
背景
在項(xiàng)目中用到了Spring Data ElasticSearch,最近更新到了最新版本5.0.x,在數(shù)據(jù)插入、修改、刪除后,緊接著進(jìn)行查詢發(fā)現(xiàn)數(shù)據(jù)并未更新;
解決方法
研究后發(fā)現(xiàn)是新版本的spring data es默認(rèn)的刷新策略是null,代碼如下:
@Bean @ConditionalOnMissingBean(value = ElasticsearchOperations.class, name = "elasticsearchTemplate") @ConditionalOnBean(ElasticsearchClient.class) ElasticsearchTemplate elasticsearchTemplate(ElasticsearchClient client, ElasticsearchConverter converter) { return new ElasticsearchTemplate(client, converter); }
這里沒(méi)有給ElasticsearchTemplate設(shè)置refreshPolicy屬性,點(diǎn)進(jìn)AbstractElasticsearchTemplate可以看到默認(rèn)為null,而以前默認(rèn)是立即刷新IMMEDIATE。
查看Spring官網(wǎng)發(fā)現(xiàn)
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.
也就是說(shuō),對(duì)es數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)變更操作時(shí),默認(rèn)是按照索引自帶的刷新策略(一般情況下是1s以后才會(huì)更新索引)
{ "settings": {}, "defaults": { "index": { "refresh_interval": "1s" } } }
如果想要在Spring data es中更新數(shù)據(jù)后立即刷新,那么需要如下配置覆蓋掉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修改數(shù)據(jù)后無(wú)法立即刷新解決方法示例的詳細(xì)內(nèi)容,更多關(guān)于Spring Data Elasticsearch無(wú)法刷新的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中FileWriter的用法及wirte()重載方法詳解
這篇文章主要介紹了Java中FileWriter的用法及wirte()重載方法詳解,FileWriter是Java編程語(yǔ)言中的一個(gè)類,用于將字符寫入文件,它提供了一種簡(jiǎn)單而方便的方式來(lái)創(chuàng)建、打開和寫入文件,通過(guò)使用FileWriter,我們可以將字符數(shù)據(jù)寫入文本文件,需要的朋友可以參考下2023-10-10Resttemplate中設(shè)置超時(shí)時(shí)長(zhǎng)方式
這篇文章主要介紹了Resttemplate中設(shè)置超時(shí)時(shí)長(zhǎng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式
這篇文章主要介紹了maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07解決使用mybatis取值,字段賦值錯(cuò)誤的問(wèn)題
這篇文章主要介紹了解決使用mybatis取值,字段賦值錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java使用NIO優(yōu)化IO實(shí)現(xiàn)文件上傳下載功能
IO 是基于流來(lái)讀取的,而NIO則是基于塊讀取,面向流 的 I/O 系統(tǒng)一次一個(gè)字節(jié)地處理數(shù)據(jù),這篇文章主要介紹了Java使用NIO優(yōu)化IO實(shí)現(xiàn)文件上傳下載功能,需要的朋友可以參考下2022-07-07Spring依賴注入方式(Dependency Injection)
在實(shí)際開發(fā)中,推薦使用構(gòu)造器注入而非字段注入,原因包括官方推薦、代碼簡(jiǎn)潔、安全性高和易于測(cè)試,構(gòu)造器注入通過(guò)在對(duì)象創(chuàng)建時(shí)注入所有必需的依賴,避免運(yùn)行時(shí)忘記注入的問(wèn)題,且利用Lombok的@RequiredArgsConstructor可自動(dòng)生成構(gòu)造函數(shù)2024-10-10