首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种使用@ConfigurationProperties从application.properties中提取嵌套属性的干净方法?

是否有一种使用@ConfigurationProperties从application.properties中提取嵌套属性的干净方法?
EN

Stack Overflow用户
提问于 2020-11-05 14:39:44
回答 1查看 711关注 0票数 0

我希望从@Value注释转向使用@ConfigurationProperties,主要是因为我最终拥有了太多的属性,因此在目标类中添加所有属性似乎会使类中的值注释变得杂乱无章,如果我将它们标记为final,那么构造函数将有一个长长的参数列表。

application.properties

代码语言:javascript
复制
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

代码语言:javascript
复制
...

@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

代码语言:javascript
复制
...

@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,以指示这是一个嵌套属性。如果有许多嵌套属性,这可能会再次失控。

我的问题是双重的-

  1. 有一种更简洁的方法来实现这一点,而不必涉及内部类并将嵌套属性绑定到同一个公共命名空间中的字段中。例如,在上面的示例中--如何绑定授权令牌或lynx命令属性,而不必添加单个字段、内部类或完全新的类。

  1. 是否有一种方法可以更改字段名并将其绑定到属性名,所以如果我想要一个不同的名称private final String SmsGatewayUsername并将其绑定到用户名属性?

中。

谢谢您,非常感谢您的评论和回答!

EN

回答 1

Stack Overflow用户

发布于 2020-11-05 15:05:09

  1. 不,您不能更改结构。但是,如果您不介意丢失bean类型,则可以绑定Map<String, Object> .

  1. 属性由bean属性绑定,这些属性由公共getter和setter决定,而不是字段名。您可以添加一个具有您喜欢的任何名称的setter,并在其中添加您想要的任何逻辑。要变得非常复杂,您可以编写一个自定义bean属性绑定程序,但我不推荐它用于用例。默认的做法是将烤肉串盒转换为camelCase.

属性名称和配置类都应该遵循逻辑结构,如果它们是相同的结构,那么处理起来就容易得多。

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

https://stackoverflow.com/questions/64699436

复制
相关文章

相似问题

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