[英]Working with @ConfigurationProperties in a non Spring-Boot application
[英]Make all spring-boot @ConfigurationProperties fields mandatory on application start without annotating each field
有沒有辦法讓所有@ConfigurationProperties
字段默認為強制性,而不用注釋每個字段?
基本上我正在尋找@ConfigurationProperties(prefix = "test", ignoreUnknownFields = false)
的對應物。
就像注釋或屬性一樣,我可以設置為ignoreUnknownFields
但驗證我的ConfigurationProperties
class 字段而不是application.yml
。
我想確保新添加的字段不會在運行時崩潰,如果它們被應用程序使用但在application.yml
中省略。
下面的示例是我當前設置的樣子:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.io.Resource;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
@Validated
@ConfigurationProperties(prefix = "test")
public class TestProperties {
@NotNull
private Resource resource;
@NotNull
private String string;
public Resource getResource() {
return this.resource;
}
public String getString() {
return this.string;
}
}
這不會在 class 級別完成,因為您可以進行不同類型的驗證。
但是,您可以創建自己的注釋以執行任何自定義驗證:
@Target({
ElementType.TYPE,
ElementType.ANNOTATION_TYPE
})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TestPropertiesValidator.class)
@Documented
public @interface ValidTestProperties {
// you can add a specific message as well
// String message () default "";
}
public class TestPropertiesValidator implements ConstraintValidator < ValidTestProperties, TestProperties > {
@Override
public void initialize(ValidTestProperties constraintAnnotation) {}
@Override
public boolean isValid(TestProperties testProperties,
ConstraintValidatorContext context) {
if (testProperties.getResource() == null || testProperties.getString() == null) {
return false;
}
}
}
@Validated
@ConfigurationProperties(prefix = "test")
@ValidTestProperties
public class TestProperties {
private Resource resource;
private String string;
public Resource getResource() {
return this.resource;
}
public String getString() {
return this.string;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.