Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止空@Value的运行时失败_Java_Spring Boot - Fatal编程技术网

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中扫描一个值内的值