ReactiveCrudRepository 提供索引名称

ReactiveCrudRepository supply with index name

我正在使用 spring-data 对 Elasticsearch 的响应式支持:

@Repository
public interface UserDocumentRepository extends ReactiveCrudRepository<UserDocument, UUID> {

}

现在,我的 UserDocument 被注释为 @Document(indexName = "user-*") 它可以正常搜索(因为我使用的是 Kafka-connect 提供的 ES,我的服务不会创建新文档)。

我的问题是我有多个环境 dev/test 当我需要为每个集群参数化索引名称时(使用相同的弹性搜索,具有不同的索引名称)。

所以对于开发,我需要 dev-user-*,对于测试,我需要 test-user-*。我可以在你可以提供 indexName 的地方使用 ReactiveElasticsearchTemplate,但是如何使用 ReactiveCrudRepository?

您可以在 @Document 注释中使用 SpEL 表达式。检查 和我对语法的回答。

编辑:

仅举几个如何动态构建索引名称的示例:

如果您有来自 application.properties 的配置,名为 env-name:

@Document(indexName = "#{@environment.getProperty('env-name')}-index-*")

我有一个名为 environmentProvider 的 bean,带有 getEnv() 方法:

@Document(indexName = "#{@environmentProvider.getEnv()}-index-*")