是否可以为每个indexName
动态(在运行时)指定@Document
,例如,通过配置文件?或者是否可以使@Document
Spring环境(dev,prod)依赖?
谢谢!
答案 0 :(得分:13)
@Document注释不允许直接在参数中传递indexname。但是我找到了一个解决方法。
在我的配置类中,我创建了一个返回字符串的Bean。在这个字符串中,我用@Value注入了索引的名称:
@Value("${etrali.indexname}")
private String indexName;
@Bean
public String indexName(){
return indexName;
}
之后可以将索引注入@Documentation注释,如下所示:
@Document(indexName="#{@indexName}",type = "syslog_watcher")
它适用于我,我希望它能帮到你。
祝你好运
答案 1 :(得分:2)
Bruno的解决方案可能有效,但“我创建了一个返回字符串的Bean”部分有点令人困惑。
我是这样做的:
在“<context:property-placeholder location="classpath:application.properties" />
”
创建一个名为ConfigBean的bean,注释为@Named
或@Component
@Named
public class ConfigBean {
@Value("${index.name}")
private String indexName;
public String getIndexName() {
return indexName;
}
public void setIndexName(String indexName) {
this.indexName = indexName;
}
}
@Document(indexName = "#{ configBean.indexName }", type = "myType")
P.S。 :你可以使用隐式bean“systemProperties”(类似#{systemProperties ['index.name']}之类的东西)直接获得相同的结果,但它对我不起作用,因为你无法解决它很难调试程序化上下文中的systemProperties(https://jira.spring.io/browse/SPR-6651)