spring 使配置属性可选

hof1towb  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(104)

我有一个spring Boot 应用程序,它使用application.yml进行配置。其结构如下:

...
rmq:
  host: "host"
  port: 5672
...

在我的代码中,我有ApplicationConfig类,如下所示:

@AllArgsConstructor
class ApplicationConfig {
  private RabbitConfig rabbitConfig;
}

@ConfigurationProperties(prefix = "rmq")
class RabbitConfig {
  @NotNull
  private String host;
  @NotNull
  private Integer port;
}

问题是rmq部分在我的应用程序中是可选的。我希望字段rabbitConfig在application.yml中不存在的情况下初始化为null。
但是如果我真的在配置文件中删除rmq部分,我会得到一个错误(rmq.host不存在)。在这种情况下,有可能强制springboot使用null初始化rabbitConfig吗?

nuypyhwy

nuypyhwy1#

在这种情况下,您可以使用@ConditionalOnProperty。在您的情况下,您应该将其定义为:

@ConfigurationProperties(prefix = "rmq")
@ConditionalOnProperty(prefix = "rmq", name = "host", matchIfMissing = true)
class RabbitConfig {
  @NotNull
  private String host;
  @NotNull
  private Integer port;
}

然后,仅当设置了rmq.host时,它才会加载Bean,否则,它将被设置为null
还有一种选择,您总是将rmq.enabled = true| false,然后是@ConditionalOnProperty(prefix = "rmq", name = "host", havingValue = true)

相关问题