Spring Boot:如何从注解值中访问配置属性?
解决方案
首先确保你的AppProperties类被正确注册为Spring Bean:
在Spring Boot启动类或配置类上添加@EnableConfigurationProperties注解,启用配置属性类的Bean注册:
@SpringBootApplication @EnableConfigurationProperties(AppProperties::class) class YourApplication
然后在Elasticsearch实体类的@Document注解中,使用带@符号的SPEL表达式引用配置Bean的属性:
@Document(indexName = "#{@appProperties.itemIndexName}") data class YourItemEntity( // 实体字段定义 )
说明
@appProperties中的@是SPEL中引用Spring Bean的标识,默认情况下配置属性类的Bean名称为类名首字母小写(即appProperties)- 确保配置文件(如
application.yml)中存在对应配置项:
app: item-index-name: your-target-index-name
为什么之前的写法无效
- 无
@的SPEL表达式#{appProperties.itemIndexName}:Spring无法识别为Bean引用,无法解析属性值 - 带
#的#{#appProperties.itemIndexName}:#用于引用方法参数或上下文变量,而非Spring Bean ${}占位符写法:部分旧版本的Spring Data Elasticsearch不支持直接在@Document的indexName中使用占位符,且Kotlin中需转义$为\$,兼容性不如SPEL方式
内容的提问来源于stack exchange,提问作者Hett
相关产品推荐
相关产品推荐

