Spring boot @ConfigurationProperties-缺少/未解析属性时的意外行为

Spring boot @ConfigurationProperties-缺少/未解析属性时的意外行为,spring-boot,Spring Boot,我正在开发一个基于SpringBoot2.4.3的应用程序 @ConfigurationProperties(prefix = "keystore") @ConstructorBinding @Validated @AllArgsConstructor @Getter public class KeyStoreProperties { @NotBlank(message = "keystore password should be provided"

我正在开发一个基于SpringBoot2.4.3的应用程序

@ConfigurationProperties(prefix = "keystore")
@ConstructorBinding
@Validated
@AllArgsConstructor
@Getter
public class KeyStoreProperties {
    @NotBlank(message = "keystore password should be provided")
    private final String password;
    @NotBlank(message = "keystore path should be provided")
    private final String path;
}
应用程序属性

keystore.password=${KEY_STORE_PASSWORD}
keystore.path=keystore/keystore.p12
我希望如果
KEY\u STORE\u密码
env。变量未设置,KeyStoreProperties.password将解析为null。但是它有一个值
“${KEY\u STORE\u PASSWORD}”


据我所知,这应该是一个特性,但在我的建议中,它会导致意外行为。这会给我运行的系统带来麻烦,因为密钥库的密码设置为错误的值。我希望应用程序启动失败,如“未解析属性…”。我怎样才能做到?在我的建议中,一个更好的解决方案是通过引入一个额外的属性,如@ConfigurationProperties(IgnoreUnsolvable=false),使其可配置。

因为Spring认为,作为一项功能,您可以向这两个属性添加正则表达式验证:

public class KeyStoreProperties {

    @Pattern(regexp="\${\S*}", message="unresolved property")  
    @NotBlank(message = "keystore password should be provided")
    private final String password;

    @Pattern(regexp="\${\S*}", message="unresolved property")  
    @NotBlank(message = "keystore path should be provided")
    private final String path;
}
public class KeyStoreProperties {

    @Pattern(regexp="\${\S*}", message="unresolved property")  
    @NotBlank(message = "keystore password should be provided")
    private final String password;

    @Pattern(regexp="\${\S*}", message="unresolved property")  
    @NotBlank(message = "keystore path should be provided")
    private final String path;
}