如何将 application.yml 中的地图注入 Spring Boot 中的字段?
Posted
技术标签:
【中文标题】如何将 application.yml 中的地图注入 Spring Boot 中的字段?【英文标题】:How to inject a map from application.yml into a field in Spring Boot? 【发布时间】:2020-03-01 05:00:35 【问题描述】:这是参考这个问题。
Spring Boot - inject map from application.yml
在那个问题上,他们有
info:
build:
artifact: $project.artifactId
name: $project.name
description: $project.description
version: $project.version
要将其映射到他们的 java 代码中,他们建议使用 @ConfigurationProperties
注释。这个注解的问题是你必须创建一个New Class
然后在它上面添加这个注解。
但是我可以像@Value
注释那样直接将它放到一个字段中吗?
在这里说我需要它:
// Someannotation or any other lean and clean way to get this
@Someannotation("$info")
private Map<String, Object> map;
上面的代码应该给我一个映射,其中键是build
,值是some Object with fields like artifact, name etc
(当然,如果这可行,我会为此创建一个POJO,而不是将其保留为普通对象)。
注意:@ConfigurationProperties
不适用于字段,这就是为什么我想看看是否有更精简和更清洁的方法来做到这一点。
附:我也可以使用@ConfigurationProperties
并创建一个新类,但我只是想看看我是否是missing out
,以一种更简单的方式来执行此操作,而无需完全创建一个新类。
【问题讨论】:
我当然知道,所以这个问题。我想看看是否有另一种方法similar to @Value
,而不必创建一个新类然后在@ConfigurationProperties
上拍打。
【参考方案1】:
我知道这样做的唯一方法是以 JSON 格式定义值部分:
app.collection.map.string.to.integer=one:"1", two:"2", three:"3"
然后注入
@Value("#$app.collection.map.string.to.integer")
private Map<String, Integer> mapStringToInteger;
来自https://relentlesscoding.com/2018/09/09/spring-basics-dynamically-inject-values-with-springs-value/ 部分 Inject Maps With Spring's @Value
【讨论】:
以上是关于如何将 application.yml 中的地图注入 Spring Boot 中的字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何修改application.yml中的info.app.name?
springBoot中的application.yml配置文件
Springboot - 从 application.yml 注入取决于方法名称