Java 防止空@Value的运行时失败
我正在尝试加载密钥库并检查过期日期。假设我有两个值Java 防止空@Value的运行时失败,java,spring-boot,Java,Spring Boot,我正在尝试加载密钥库并检查过期日期。假设我有两个值 @Value(“${connections.keystoreA}”) private String keystoreA; @Value(“${connections.keystoreB}”) private String keystoreB; 有些环境具有其中一个值,有些环境同时具有这两个值。我的问题是,如果其中一个值不存在,除了使用默认值之外,还有什么方法可以防止在运行时失败 编辑:我还希望这样做,以便将来可以添加其他配置,keystor
@Value(“${connections.keystoreA}”)
private String keystoreA;
@Value(“${connections.keystoreB}”)
private String keystoreB;
有些环境具有其中一个值,有些环境同时具有这两个值。我的问题是,如果其中一个值不存在,除了使用默认值之外,还有什么方法可以防止在运行时失败
编辑:我还希望这样做,以便将来可以添加其他配置,keystoreC、keystoreD等。您可以在
应用程序中执行if/else。properties
并设置默认值。
例如,您的application.properties可以是:
my.connections.keystoreA=${connections.keystoreA:defaultA}
my.connections.keystoreB=${connections.keystoreB:defaultB}
其思想是:如果connections.keystrea
不存在,将注入字符串defaultA
之后,您可以注入以下值:
@Value("${my.connections.keystoreA}")
private String keystoreA;
@Value("${my.connections.keystoreB}")
private String keystoreB;
这样做,spring在运行时不会失败
另一个选项是在字段中直接使用此if/else,以便在必要时设置默认值:
@Value("${connections.keystoreA:defaultA}")
private String keystoreA;
@Value("${connections.keystoreB:defaultB}")
private String keystoreB;
因为您不想使用默认值,也不想在运行时出现
Exception
,所以应该使用org.springframework.core.env.Environment
bean
只需@Autowire
组件中的环境,并使用getProperty
方法从yml配置中获取属性
例如,如果要获取my.connections.keystrea
的值,您将使用:
String value = environment.getProperty("my.connections.keystoreA");
现在,如果您的yml文件中有该键的值,该值将存储在
value
变量中。如果该键没有值,则value
变量的值将为空。谢谢!是否可以在不修改yaml或使用任何默认值的情况下完成此操作?谢谢。这很有帮助,但我不希望修改yaml文件或使用任何默认值。@T.Phillips在未定义属性时,您的预期行为是什么?您可以通过CLI-Dmy.connections.keystrea=“some_value”@T.Phillips设置属性。如果您不想更改代码,则应在启动应用程序之前导出connections.keystrea(如果使用Linux)。我的意思是,使用bash脚本,必须检查变量是否存在,如果不存在,则导出它。然后,启动应用程序。仅供参考,您使用的是哪个版本的spring boot?我在1.5.8上进行了测试,没有出现空指针异常。还表示如果没有值,则返回null。您能显示您尝试过的代码吗?我使用@AutoConfiguration在yaml中扫描一个值内的值