Spring 运行时定义的数据 Elasticsearch @Document indexName

Spring Data Elasticsearch @Document indexName defined at runtime

是否可以为每个 @Document 动态(在运行时)指定 indexName,例如,通过配置文件?或者是否可以使 @Document Spring 环境(dev,prod)依赖?

谢谢!

@Document 注解不允许在参数中直接传递索引名。但是我找到了解决方法。

在我的配置中 class 我创建了一个返回字符串的 Bean。在这个字符串中,我用 @Value 注入了索引的名称:

@Value("${etrali.indexname}")
private String indexName;

@Bean
public String indexName(){
    return indexName;
}

之后可以像这样将索引注入 @Documentation 注释:

@Document(indexName="#{@indexName}",type = "syslog_watcher")

对我有用,希望对你有帮助。

此致

Bruno 的解决方案可能有效,但 "I created a Bean returning a string" 部分有点令人困惑。

这是我的做法:

  • 在“<context:property-placeholder location="classpath:application.properties" />”加载的 application.properties 文件中设置 "index.name" 键值

  • 创建一个名为 ConfigBean 并用 @Named@Component

  • 注释的 bean

    @Named
    public class ConfigBean {

      @Value("${index.name}")
      private String indexName;

      public String getIndexName() {
        return indexName;
      }

      public void setIndexName(String indexName) {
        this.indexName = indexName;
      }      

    }
  • 使用 Spring EL 将 configBean.getIndexName() 的值注入“@Document”注解:@Document(indexName = "#{ configBean.indexName }", type = "myType")

P.S。 :您可以直接使用隐式 bean "systemProperties"(类似于 #{ systemProperties['index.name'] })获得相同的结果,但它对我不起作用并且很难调试,因为你可以' t 在编程上下文中解析 systemProperties (https://jira.spring.io/browse/SPR-6651)