SpEL 在@Document indexName 中使用 spring data elasticsearch 和 spring boot 未被解析
SpEL used in @Document indexName with spring data elasticsearch and spring boot is not being parsed
使用 @Document
注释中的 SpEL 寻求一些帮助,参考:
spring-data-elasticsearch:3.2.3.RELEASE
和 spring 启动 2.2.1 RELEASE
我无法通过谷歌搜索来解决这个问题,因为关键字会挑出不相关的问题(我已经看到 other (unanswered) question about dynamic indexName)。
我想设置
@Document(indexName = "${es.index-name}", ...)
indexName
的值源自 属性 (es.index-name
) 中写入我的 application.properties
的值。
它使用文字字符串值 "${es.index-name}"
作为索引名称!
我也试过创建一个名为 EsConfig
的 @Component
字段 indexName
注释 @Value("${es.index-name}")
然后尝试使用 SpEL 访问此组件 属性 值:
@Document(indexName = "#{esConfig.indexName}", ...)
但这也不起作用(仍然解析为文字字符串并抱怨大写)。我已经通过调试器确认 EsConfig
组件正在正确解析 SpEL 并提供正确的值。但在到达 @Document
时失败
这里是完整的代码片段:
使用 @Document
和 SpEL 访问 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
和 SpEL 访问 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()}")
使用 @Document
注释中的 SpEL 寻求一些帮助,参考:
spring-data-elasticsearch:3.2.3.RELEASE
和 spring 启动 2.2.1 RELEASE
我无法通过谷歌搜索来解决这个问题,因为关键字会挑出不相关的问题(我已经看到 other (unanswered) question about dynamic indexName)。
我想设置
@Document(indexName = "${es.index-name}", ...)
indexName
的值源自 属性 (es.index-name
) 中写入我的 application.properties
的值。
它使用文字字符串值 "${es.index-name}"
作为索引名称!
我也试过创建一个名为 EsConfig
@Component
字段 indexName
注释 @Value("${es.index-name}")
然后尝试使用 SpEL 访问此组件 属性 值:
@Document(indexName = "#{esConfig.indexName}", ...)
但这也不起作用(仍然解析为文字字符串并抱怨大写)。我已经通过调试器确认 EsConfig
组件正在正确解析 SpEL 并提供正确的值。但在到达 @Document
这里是完整的代码片段:
使用 @Document
和 SpEL 访问 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
和 SpEL 访问 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()}")