首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@Value Spring Annotation从.yaml读取的属性映射的正确用法是什么

使用@Value Spring Annotation从.yaml读取的属性映射的正确用法是什么
EN

Stack Overflow用户
提问于 2019-04-17 03:23:39
回答 1查看 1.7K关注 0票数 3

我在Spring Boot应用程序中通过以下方式注入了从.yaml读取的映射中的属性:

代码语言:javascript
复制
@Value("#{${app.map}}")
private Map<String, String> indexesMap = new HashMap<>();

但两者都不是

代码语言:javascript
复制
app:
    map: {Countries: 'countries.xlsx', CurrencyRates: 'rates.xlsx'} 
    //note values in single quotes  

nor
app:
    map: {Countries: "countries.xlsx", CurrencyRates: "rates.xlsx"}

(如https://www.baeldung.com/spring-value-annotation所述)

nor

代码语言:javascript
复制
app:
    map:
      "[Countries]": countries.xslx
      "[CurrencyRates]": rates.xlsx

(在https://stackoverflow.com/a/51751123/2566304上建议)

works -我一直收到消息“插入自动连接的依赖项失败;嵌套的异常是java.lang.IllegalArgumentException:无法解析占位符”

同时,这也是可行的:

代码语言:javascript
复制
@Value("#{{Countries: 'countries.xlsx', CurrencyRates: 'rates.xlsx'}}")
private Map<String, String> indexesMap = new HashMap<>();

但我希望将属性外部化

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 04:37:31

按照您所链接的问题的答案之一所建议的,使用@ConfigurationProperties

代码语言:javascript
复制
@Bean(name="AppProps")
@ConfigurationProperties(prefix="app.map")
public Map<String, String> appProps() {
    return new HashMap();
}

然后

代码语言:javascript
复制
@Autowired
@Qualifier("AppProps")
private Map<String, String> props;

将与配置一起工作

代码语言:javascript
复制
app:
  map:
    Countries: 'countries.xlsx'
    CurrencyRates: 'rates.xlsx'

编辑:@Value注释也可以使用,但您必须将其视为YAML中的字符串:

代码语言:javascript
复制
@Value("#{${app.map}}")
private Map<String, String> props;

代码语言:javascript
复制
app:
  map: "{Countries: 'countries.xlsx', CurrencyRates: 'rates.xlsx'}"

请注意map值周围的引号。显然,Spring在这种情况下是从一个字符串中解析出来的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55715308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档