【问题标题】:How to config a multiple prefix ConfigurationProperties with kotlin data class如何使用 kotlin 数据类配置多个前缀 ConfigurationProperties
【发布时间】:2020-07-24 04:49:39
【问题描述】:

库 A 中的 kotlin 数据类,用于配置不可变属性(所有属性设置为 val 而不是 var):

data class Cfg(
  val name: String, 
  ...
)

从spring boot 2.2.0开始,可以使用下面的代码来配置一个单一但固定的前缀:

@ConstructorBinding
@ConfigurationProperties(prefix = "app.cfg")
data class Cfg(...)

我的应用依赖于库A,但是需要配置多个不同前缀的Cfg实例,例如app.cfg1app.cfg2。这些前缀是由应用程序选择的。怎么样?

【问题讨论】:

  • 让我看看我是否理解正确,您希望您的应用程序在外部库中定义的类中控制 @ConfigurationProperties 的前缀?
  • @MarcosBarbero 将多个Cfg 实例注册为具有不同前缀的spring bean 的任何方式都是可以接受的。
  • 您可以使用不同的命名同时声明多个 bean,我会写一个答案,以便您可以获得一些代码格式和东西

标签: spring spring-boot kotlin


【解决方案1】:

您可以使用示例中的类声明多个相同类型的 bean 并根据需要为其定义前缀:

@Configuration
class CfgConfiguration {

  @Bean
  @ConfigurationProperties("app.cfg1")
  public Cfg cfg1() {
    return new Cfg();
  }

  @Bean
  @ConfigurationProperties("app.cfg2")
  public Cfg cfg2() {
    return new Cfg();
  }
}

您可以根据需要添加任意数量的绑定属性。

【讨论】:

  • 我知道这种方式。但是对于具有不可变属性的 kotlin 数据类是不可能的,因为没有属性的 setter 并且没有实例 Cfg 类的参数构造函数。
  • 对不起,我错过了帖子的那部分!不幸的是,您无法绑定这种类型的类
猜你喜欢
  • 2020-08-26
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2019-11-30
  • 2018-01-27
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多