这是一个Spring Boot
应用程序。我想在开始时检查并通知用户,如果有人配置了错误的Yaml file
。我想问你们中的一些人
RuntimeException
是正确的选择吗?lombok
注释?谢谢
@Component
@ConfigurationProperties
@Data
@NoArgsConstructor
public class ApplicationProperties{
@Data
@NoArgsConstructor
public static class Something {
private String name;
@Setter(AccessLevel.NONE)
private int width;
@Setter(AccessLevel.NONE)
private int height;
public void setWidth(int width) throws Throwable {
if (0 > width || 100 < width) {
throw new RuntimeException("The width should be between 0 and 100.");
}
this.width = width;
}
public void setHeight(int height) throws Throwable {
if (0 > height || 250 < height) {
throw new RuntimeException("The height should be between 0 and 250.");
}
this.height = height;
}
}
}
答案 0 :(得分:3)
首先,欢迎来到SO!让我解释一下如何验证应用程序属性。有一种简单的方法可以使用验证批注实现此目的。 ApplicationContextAware
支持JSR-303 Bean验证:
BeanUtil
请注意,如果验证引发异常,此方法将使应用程序启动失败。
第二,要了解这是否是正确的方法,您必须描述您的用例。我个人会坚持使用现有标准,并使用验证批注流程。
最后,关于您的@ConfigurationProperties
注释。您可以全局使用@ConfigurationProperties("prefix")
public class MyProperties {
@Max(100)
@Min(0)
private Integer width;
@Max(100)
@Min(1)
private Integer height;
}
和lombok
批注,也可以像这样将其放在您的字段中以指定细粒度的访问。
我不是@Getter
批注的忠实拥护者,因为它可能会生成一些您可能不需要(或可能再次取决于您的用法)想要的额外方法。我记得生成的@Setter
方法在嵌套实体和循环依赖方面存在一些问题。