【发布时间】:2021-02-18 06:58:51
【问题描述】:
我希望从 @Value 注释转移到使用 @ConfigurationProperties 主要是因为我最终拥有太多属性,因此将所有属性添加到目标类中似乎会使带有值注释的类变得混乱,如果我要将它们标记为 final,那么构造函数将有一个很长的参数列表。
application.properties
sms-gateway:
sms:
authorization:
token: xyz
username: abc
password: pass
url: http://example.com
lynx:
cmd: lynx -dump -display_charset=utf-8 <%= @sms-gateway_sms_url %>
via:
cmd: true
admin:
status:
url: http://admin.example.com/status
SmsService.java
...
@Value("${sms-gateway.sms.url}")
private String url;
@Value("${sms-gateway.sms.username}")
private String username;
@Value("${sms-gateway.sms.password}")
private String password;
and so on ...
作为替代@ConfigurationProperties 允许您拥有一个将属性组合在一起的专用类。但是,您最终将其绑定到一个公共命名空间,以便属性与使用 @ConfigurationProperties 注释的类的字段绑定。
SmsConfig.java
...
@Getter
@RequiredArgsConstructor
@Configuration
@ConfigurationProperties(prefix = "sms-gateway.sms")
public class SmsConfig.java {
private final String username;
private final String password;
private final String url;
...
}
但是,要添加其他嵌套属性,您需要为每个嵌套属性添加类以及 @NestedConfigurationProperty 以表明这是一个嵌套属性。如果有许多嵌套属性,这可能会再次失控。
我的问题有两个——
-
有没有一种更简洁的方法来实现这一点,而不必涉及内部类并将嵌套属性绑定到同一个公共命名空间中的一个字段下。 例如在上面的示例中 - 我们如何绑定授权令牌或 lynx 命令属性,而无需添加单个字段内部或全新的类。
-
有没有办法更改字段名称并将它们绑定到属性名称,所以如果我想要一个不同的名称
private final String SmsGatewayUsername并将其绑定到用户名属性?
感谢您提供任何 cmets 和答案!
【问题讨论】:
标签: java spring spring-boot properties spring-properties