在我的项目中,当我的类(class)扩展ElasticsearchRepository时,我正在使用ElasticsearchRepository。
有没有办法动态地更改indexName属性,我不想使用@Document,因为我的indexName是动态的?
最佳答案
@Document(indexName =“xxx”)可以是SpEL表达式。只要SDE需要索引名称来获取索引名称,就将解析该表达式。因此,您可以使名称基于在运行时配置的内容,例如通过application.yml文件。从理论上讲,您可以在SpEL中做任何事情。
我使用它来定义一个“前缀”值,该值前缀在所有索引名的前面,以允许我在同一ES群集中以相同的基本索引名运行多个应用程序而不会相互冲突。所以我有@Document()标记为:
@Document(indexName = "#{environment.getRequiredProperty('es.prefix') + '-doc'}")
然后,我将es.prefix配置为application.properties或application.yml文件中所需的值。