Spring boot @ConfigurationProperties-缺少/未解析属性时的意外行为
我正在开发一个基于SpringBoot2.4.3的应用程序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"
@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;
}