防止空@Value运行时失败

时间:2018-06-25 18:15:27

标签: java spring-boot

我正在尝试加载密钥库并检查到期日期。所以说我有两个值

@Value(“${connections.keystoreA}”)
private String keystoreA;

@Value(“${connections.keystoreB}”)
private String keystoreB;

某些环境具有这些值中的1个,有些具有两个。我的问题是,除了使用默认值之外,如果没有其中一个值,是否有任何方法可以防止此错误在运行时出现?

编辑:我也想这样做,以便以后可以添加其他配置,例如keystoreC,keystoreD等

2 个答案:

答案 0 :(得分:1)

您可以在application.properties中进行if / else并设置默认值。 例如,您的application.properties可能类似于:

my.connections.keystoreA=${connections.keystoreA:defaultA}
my.connections.keystoreB=${connections.keystoreB:defaultB}

这个想法是:如果connections.keystoreA不存在,则将插入字符串defaultA

之后,您可以注入值:

@Value("${my.connections.keystoreA}") 
private String keystoreA;    
@Value("${my.connections.keystoreB}") 
private String keystoreB;

这样做,spring不会在运行时失败。

另一种选择是在必要时在字段中直接/否使用此值以设置默认值:

@Value("${connections.keystoreA:defaultA}") 
private String keystoreA;    
@Value("${connections.keystoreB:defaultB}") 
private String keystoreB;

答案 1 :(得分:0)

因为您不想使用默认值,并且不想在运行时使用Exception,所以应该使用org.springframework.core.env.Environment bean。

只需@Autowire您组件中的环境,然后使用getProperty方法即可从yml配置中获取属性。

例如,如果要获取my.connections.keystoreA的值,将使用:

String value = environment.getProperty("my.connections.keystoreA");

现在,如果您的yml文件中有此键的值,则该值将存储在value变量中。如果该键没有值,则value变量的值将为null。