【问题标题】:Spring Boot - making configuration finalSpring Boot - 使配置最终
【发布时间】:2016-11-07 19:12:50
【问题描述】:

我的 Spring Boot (1.3.5) 应用程序使用 application.properties 文件的外部化配置。此外,我目前有一个这样的配置类:

@Configuration
MyConfig {
   @Value("${prop}")
   private String prop;

   // getters
}

我想知道是否有办法使prop 成为最终版本。理想情况下,我想公开访问我的配置属性;例如myConfig.prop。我想让所有属性 publicfinal;但是我相信配置类在加载属性之前首先通过一个空的构造函数进行实例化。有其他方法吗?

【问题讨论】:

  • 为什么?您在运行时有什么顾虑?
  • 这不是运行时问题;而是避免其他开发人员无意中更改配置。

标签: java configuration spring-boot final


【解决方案1】:

您可以在构造函数中注入配置值并分配给final 字段。

@Configuration
class MyConfig {
  private String final prop;
  public MyConfig(@Value("${prop}") String prop){
    this.prop = prop;
  }

 }

【讨论】:

  • 是的,行得通。如果我有很多配置怎么办?我想这是将其拆分为更小的配置类的动机?
  • @user1491636 是的,你可以这样做,DBConfig 和 SMTPConfig 可以进入不同的配置类
  • 所以在进行此更改后,我得到一个启动异常:No default constructor found;
  • 这是private final String prop;,而不是private String final prop;
【解决方案2】:

对于所有登陆这里并问自己相同问题的人,请查看https://stackoverflow.com/a/57191291/11770752

此外,如果需要,您可以将其与 lombok 一起使用,这会减少类的样板代码。

【讨论】:

  • 该解决方案不适用于 Spring Boot 1.3.6 版(在问题中指定)。
  • 你是对的,以防万一新版本的任何人(假设这是用户的大部分)好奇我希望他们提供更多信息。如果这有点糟糕,我会原谅自己。
猜你喜欢
  • 2017-10-26
  • 2013-11-01
  • 2015-07-27
  • 1970-01-01
  • 2018-07-14
  • 2018-06-14
  • 2019-10-28
  • 2017-05-02
  • 2016-01-09
相关资源
最近更新 更多