这里只讨论使用 @Value("${key}") 的方式来读取配置文件中的数据。
配置单个数据(中间没有英文逗号,后续会解释为什么这么区分)
纯数字
可以使用String 、Integer、int来接收,比如:【待验证】
delay.time.second=3
接收
@Value("${delay.time.second}")
private String delayTimeSecond;
@Value("${delay.time.second}")
private int delayTimeSecond;
@Value("${delay.time.second}")
private Integer delayTimeSecond;
带英文或汉字
只能使用String、String[] 来接收,其中如果使用String[]来接收的话,只有一个属性
delay.time.second=1s
接收
@Value("${delay.time.second}")
private String delayTimeSecond;
@Value("${delay.time.second}")
private String[] delayTimeSecond;
配置多个数据(使用英文逗号分割)
前面说明了只有一个数据时,不同的value对应的支持固定的数据类型来接收。简单来讲,就是纯数字的时候可以使用数字相关的类型来接收,且会自动的类型转换,但是如果包含了字母、汉字或者符号,就不可以了。
这里解释一下为什么我以是否包含英文逗号来表示是一个数据还是多个数据,因为在之前我测试的时候,为了简单,我使用的是spring boot测试的,在springboot中,如果我们按照下面的方式写配置文件数据,是可以被程序自动识别为数组的,如果其中每一项都是数字,则还可以使用数字相关的类型来接收,但是在spring framework中还不支持,在spring framework中,只要包含了符号,就只能是String类型或者String[]。
delay.time.second=3,4,5
接收
@Value("${delay.time.second}")
private Ineger[] delayTimeSecond;
相关报错内容
以英文逗号将数据分割成多个内容,并使用数组接收,比如
delay.jobType=190,56
接收
@Value("${delay.jobType}")
private Integer[] delayJobTypeListIntegerArray;
报错
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer[]'; nested exception is java.lang.NumberFormatException: For input string: "190,56"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
补充
ymal支持数组,可是properties我们刚刚也发现了是不支持的,如果我们的项目使用的springboot,当然也可以使用英文逗号来实现将数据转换为数组,但是如果项目是SSM的框架,我们可以这么做来实现相同的功能:
1、数据使用英文逗号来分割
2、使用String类型来接收
3、在代码中对String数据以英文逗号进行分割,手工的转换为数组