首页 > 解决方案 > 验证 Springboot 配置的自定义规则

问题描述

在我的 Springboot 程序中,我想验证我的配置。

假设我有一个配置,例如:

@Component
@ConfigurationProperties("jms")
public class JmsConfiguration {

  protected String brokerType = "";
  protected String host = "";
  protected String port = "";

}

我知道我可以使用@Validated注释进行非常基本的检查,例如

@Component
@ConfigurationProperties("jms")
@Validated
public class JmsConfiguration {

  protected String brokerType = "";
  protected String host = "";

  @Positive
  protected String port = ""; /// must be strictly positive

}

但是我怎样才能进行更复杂的检查呢?例如,我怎样才能确保brokerType是不是emsamq但不是别的?

或者更复杂的是,我如何确保端口大于 1000,如果且仅当brokerTypeamq(愚蠢的情况,但它是示例)

我尝试使用@Constraint但没有成功(但是,我不确定这是做我想做的最好的方法......)

感谢帮助

问候,菲利普

标签: javaspringspring-bootconfigurationjax-rs

解决方案


brokerType可以验证为ems或者通过为它amq创建一个enum

Spring@ConfigurationProperties对枚举有一流的支持。

请在此处查看示例 https://www.logicbig.com/tutorials/spring-framework/spring-boot/configuration-properties-vs-value-conversion.html

相关示例来自上面的链接

@ConfigurationProperties("app")
public class MyAppProperties {
  private int refreshRate;
  private TimeUnit refreshTimeUnit;
  private Currency tradeCurrency;
    .............
}

推荐阅读