0
点赞
收藏
分享

微信扫一扫

spring data elasticsearch:动态配置实体类索引名称indexName


0. 引言

最近接到一个需要,需要在spring data elasticsearch关联的实体类中动态的根据配置文件动态创建索引名称,比如开发环境下索引名称为user-dev,测试环境下为user-test,生产环境为user-prod

一开始接到这个需要觉得很怪,因为不同环境的区分直接搭建不同的es服务器环境不就行了吗,为什么要这么麻烦来处理呢?后来了解到是因为当前项目成本受限,需要隔离开发环境和测试环境用的同一台服务器,于是就产生了这个奇怪的需求。

其实想想,不排除某些场景下,就需要动态的创建索引名称。于是今天我们就来看看怎么实现这个需求

1. 解决

首先我们需要明确目标,我们要动态定义这里的indexName。也就是说我们要在​​'user'-dynamic​​​后拼接上我们的​​spring.profiles.active​​配置项

spring data elasticsearch:动态配置实体类索引名称indexName_elasticsearch

2、首先我们需要创建Bean,用来声明active

/**
* @author whx
* @date 2022/7/22
*/
@Component
@Getter
public class IndexNameBean {

@Value("${spring.profiles.active}")
private String active;
}

3、我们在配置文件​​application.yml​​中声明active

spring:
profiles:
active: dev

4、然后在实体类中通过​​#{indexNameBean.active}​​来拼接

spring data elasticsearch:动态配置实体类索引名称indexName_spring_02

5、运行项目进行测试(我这里设置了启动项目自动根据实体类创建索引)

kibana中执行​​GET user-dynamic-dev/_mapping​​​查询到索引​​user-dynamic-dev​​存在,说明动态创建成功

spring data elasticsearch:动态配置实体类索引名称indexName_spring_03

6、修改配置文件中active为test,重启项目

spring:
profiles:
active: test

kibana中执行​​GET user-dynamic-test/_mapping​​查询到索引存在,切换成功

spring data elasticsearch:动态配置实体类索引名称indexName_java_04

这样只要不同的环境的配置文件中声明不同的active就是实现索引名称的动态切换了

问题搞定!

2. 文中源码

文中演示源码见如下git地址:

​​https://gitee.com/wuhanxue/es-test3.x​​


举报

相关推荐

0 条评论