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)
是否可以为每个 @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)