暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Elastic之家 2022-07-30
651

0. 引言

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

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

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

1. 解决

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



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}
      来拼接



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

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



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

        spring:
        profiles:
        active: test

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



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

        问题搞定!

        2. 文中源码

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

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

        Elastic  


        ~


        文章转载自Elastic之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论