Bra*_*lor 6 java configuration spring yaml spring-boot
我有一个问题类似于Yaml中的映射列表中描述的Spring Boot中的对象列表,除了我想从YAML中使用的相应键名改变我的对象中至少一个字段的标识符.
例如:
YAML文件:
config:
gateways:
-
id: 'g0'
nbrInputs: 128
nbrOutputs: 128
-
id: 'g1'
nbrInputs: 128
nbrOutputs: 128
Run Code Online (Sandbox Code Playgroud)
配置类:
@Configuration
@ConfigurationProperties(prefix="config")
public class GatewayConfig
{
List<Gateway> gateways = new ArrayList<Gateway>();
// Getter/Setter for gateways
// ...
public static class Gateway
{
private String id;
@Value("${nbrInputs}")
private int numInputs;
@Value("${nbrOutputs}")
private int numOutputs;
// Getters and Setters
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我希望@Value注释允许我注入相应的属性值,但这似乎不起作用(注入'id'字段似乎工作得很好).
有没有办法用@Value(或任何其他注释)执行此操作?
谢谢.
编辑: 请注意,我想确定是否可以强制YAML属性与内部POJO中的字段之间的对应关系而不更改其中任何一个的名称.我可能想要这样做有几个原因 - 例如,我可能无法控制YAML文件的格式,并且我想在我的POJO中使用比YAML文件的作者使用的更具描述性的标识符名称.
正如Stephave Nicoll所说,@Value注释与之无关@ConfigurationProperties.只需在内部POJO中命名与配置文件中相同的字段,这应该有效:
@Configuration
@ConfigurationProperties(prefix="config")
@EnableConfigurationProperties
public class GatewayConfig
{
List<Gateway> gateways = new ArrayList<Gateway>();
// Getter/Setter for gateways
// ...
public static class Gateway
{
private String id;
private int nbrInputs;
private int nbrOutputs;
// Getters and Setters
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
对评论的反应:
使用普通的Spring/Spring Boot,我认为您不能映射具有不同名称的字段并将其加载到网关列表中.可以选择使用普通的@Value注释,但您的网关数量需要进行硬编码:
@Component
public class Gateway0{
@Value("${config.gateways[0].id}")
private String id;
@Value("${config.gateways[0].nbrInputs}")
private int numInputs;
@Value("${config.gateways[0].nbrOutputs}")
private int numOutputs;
// Getters and Setters
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12104 次 |
| 最近记录: |