spring配置文件默认类型与进制转换的坑
在使用spring配置时,常用的做法是在.properties文件中配置key-value,然后在java代码中使用@Value注解引用。
但我们注意到,propertites文件中的value是没有类型的,类似12398这种配置可以同时被解读为字符串和整数,当我们声明了一个整数格式的配置项并在java中使用@Value将其作为String引入时会发生什么呢?
我们原有的认知中加载顺序是:
- 获取字符串
- 判断目标类型并直接引用为字符串
但我们在properties文件中定义了一个如此格式的整数:0120600433
在java中作为String引用后却变成了一个奇怪的数字:21168411
分析2个数字过后我们可以得知:将0120600433作为8进制数转换为了10进制的21168411。
所以我们可以推测在spring内部处理顺序是这样的:
- 获取配置项
- 优先以数字格式进行处理,在此处进行可能的格式转换(包含进制转换)
- 将转换后的结果注入到java的变量中
所以,对于以0开头的数字类型,如果要以字符串的形式使用,需要在properties用双引号处理,避免进制转换的发生。