@Value如何设置默认值
@Value设置默认值
使用@Value注解将变量进行自动注入的时候,经常会出现的一个问题就是我们可能会由于在配置参数中忘记设置该参数造成整个项目报错,其实我们可以通过给被@Value注解作用的变量进行注入的时候如果没有找到该配置参数时设置一个默认值,相当于是一个兜底的方案:
没有默认值的用法:
@Value("${spring.port}") private String port;
增加默认值的用法:
@Value("${spring.port:8080}") private String port;
这里需要注意的是:
- 即使你的配置参数的值是String类型的话也不需要加双引号
- 被static修饰的变量通过@Value会注入失败
如果是因为特定需求必须要给static变量进行@Value设值的话,可以采用下面这种方式
- 给static变量采用@Value设值
public static String port; @Value("${spring.port:8080}") public void setPort(String port){ Class.port = port; }
@Value() 设置默认值后,配置值无法生效的解决
遇到的现象:
使用@Value(${cash.trade.show.loan.repay:true})配置后,即使配置文件里配置了cash.trade.show.loan.repay = false ,程序获得的showLoanRepay还是true。
这边源码会去匹配":"获得后面的值,然后给propVal赋值,由于后面的判断都是依照if(propVal==null)进行判断的,所以默认值赋值上去之后就不会获取配置文件的值了。
这个是PropertyPlaceholderConfigurer的问题,如果是
由于方法列表里放有两个方法,PropertyPlaceholderConfigurer先操作,所以默认值赋值后导致后面的PropertySourcesPlaceholderConfigurer无法获取到配置项里的内容,如果列表顺序换一下,就可以了,但是没找到怎么弄。
这边就是按顺序方法执行进行匹配参数
解决方法和解决理由
所以打算换个思路,不设置默认值,并且让系统在没有获取到默认值时也不报错。
进入源码发现,如果没有配置时会根据下面这个参数进行判断是否抛出异常
而前一张图里发现PropertyPlaceholderConfigurer的值为true,PropertySourcesPlaceholderConfigurer的值为false,所以我们需要把PropertySourcesPlaceholderConfigurer的值配置成true这样两个工具都不会进行抛错了。
只需要在spring的xml配置中加以下代码对 进行设置
<bean id="propertySourcesPlaceholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> <property name="ignoreUnresolvablePlaceholders" value="true"/> </bean>
但是这里要注意了,如果你默认的参数设置成String以外的就会报错哦,我这边就是设置成Boolean。
这里发现,如果你没有进行配置,并且设置忽略没配置时,value值会被设为${}里面的参数名称,所以会抛出类型异常,所以我把参数设置成了String,并且当值等于参数名时当成时默认值。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
在javaweb开发过程中,使用热部署神器 JRebel可以使class类还是更新spring配置文件都能立马见到效率,本文给大家介绍JRebel的两种安装方法,小编建议使用第二种方法,具体安装步骤跟随小编一起看看吧2021-06-06Mybatis-plus自定义SQL注入器查询@TableLogic逻辑删除后的数据详解
这篇文章主要给大家介绍了关于Mybatis-plus自定义SQL注入器查询@TableLogic逻辑删除后的数据的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2023-03-03Java泛型枚举Annotation接口详细解读与Eclipse发展
这篇文章主要给大家介绍了关于Java中方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-08-08Spring Boot 2 实战:自定义启动运行逻辑实例详解
这篇文章主要介绍了Spring Boot 2 实战:自定义启动运行逻辑,结合实例形式详细分析了Spring Boot 2自定义启动运行逻辑详细操作技巧与注意事项,需要的朋友可以参考下2020-05-05
最新评论