vam*_*ire 6 spring-annotations spring-el spring-boot spring-data-elasticsearch
寻找使用 SpEL 内部@Document注释的一些帮助,参考:
spring-data-elasticsearch:3.2.3.RELEASE 和弹簧靴 2.2.1 RELEASE
我在用谷歌搜索帮助解决这个问题时遇到了麻烦,因为关键字选择了不相关的问题(我已经看到了关于动态 indexName的另一个(未回答的)问题)。
我想设置
@Document(indexName = "${es.index-name}", ...) 
用my 中写入indexName的属性 ( es.index-name) 值派生的值application.properties。
它改为使用文字字符串值"${es.index-name}"作为索引名称!
我也试过创建一个@Component叫EsConfig 
带有indexName注释的字段@Value("${es.index-name}") 
然后尝试使用 SpEL 访问此组件属性值:
@Document(indexName = "#{esConfig.indexName}", ...) 
但这也不起作用(仍然解析为文字字符串并抱怨大写)。我已经通过调试器确认EsConfig组件正在正确解析 SpEL 并提供正确的值。但到达时失败@Document
以下是完整的代码片段:
利用@Document与规划环境地政司访问application.properties
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Data
@Document(indexName = "${es.index-name}", type = "tests")
public class TestDocument {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private String id;
}
EsConfig data source Component (尝试使用和不使用 Lombok)
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("esConfig")
public class EsConfig {
  @Value("${es.index-name}")
  private String indexName;
  public String getIndexName() {
    return indexName;
  }
  public void setIndexName(String indexName) {
    this.indexName = indexName;
  }
}
利用@Document与规划环境地政司访问EsConfig indexName属性
@Data
@Document(indexName = "#{esConfig.indexName}", type = "tests")
public class TestDocument {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private String id;
}
使用名称和方法引用您的 bean:
@Document(indexName = "#{@esConfig.getIndexName()}")
| 归档时间: | 
 | 
| 查看次数: | 1053 次 | 
| 最近记录: |