likes
comments
collection
share

@Value vs @ConfigurationProperties 我选择后者

作者站长头像
站长
· 阅读数 11

1:@Value

在SpringBoot中,@Value这个注解是大家最不陌生也是用的很多的,简单来说就是在配置文件中配置一个属性之后,我们可以在Bean中用@Value这个注解获取配置的值,但是我并不介意使用@Value而是推荐使用 @ConfigurationProperties,接下来我说说为什么

2: 校验功能

如果我们要使用一个配置,如果这个配置的值不能为空,那么只有当程序使用到这个配置的时候才会报空指针异常等,那有没有办法在程序启动的时候就告知我们呢?? @ConfigurationProperties就可以做到

@Value

@Value vs @ConfigurationProperties 我选择后者

@Value vs @ConfigurationProperties 我选择后者

当我们使用@Value注解的时候,项目可以正常启动,访问/index接口的时候返回的就是NULL,如果这个时候这个配置我们是不能为空的,那只有当程序使用到该配置的时候才会报错

@ConfigurationProperties

@Value vs @ConfigurationProperties 我选择后者

在项目启动的时候就会报错,这样就可以有效的预防少些配置或者配置不符合等情况了

@Value vs @ConfigurationProperties 我选择后者

3: 自动刷新

在项目中经常会使用到统一配置中心,这里我使用的是Naocs,Nacos是可以支持配置自动刷新的,但是在使用@Value注解的时候,我们需要再加上@RefreshScope注解才能达到自动率刷新的效果,如果不配置@RefreshScope这个注解自动刷新就不会生效

@Value vs @ConfigurationProperties 我选择后者

但是@ConfigurationProperties不需要,它本身就支持配置自动刷新,不需要再依靠@RefreshScope注解,Nacos上修改了配置就会自动刷新

4:配置复杂度

这里的复杂度不是说使用的简易程度,如果我们有多个配置,几十个,几百个配置,那我们就要写几百个@Value的注解,这样后期维护难度就增加了,也不方便管理,尤其是某一类的配置,但是@ConfigurationProperties注解可以配置多个,我们可以将某一类的配置都配置在某一个类中,这样后期既方便管理也减少了维护的难度,不然你要修改某一个配置,你还要整个项目一个个的去找,无疑增加了维护难度.

比如可以把消息中间件的配置写在一个配置类中,这样以后如果我要修改消息中间件的配置直接找到这个配置类就行了,不需要再去找对应的@Value注解在哪

5:总结

所以在项目中我推荐使用 @ConfigurationProperties ,而不是使用@Value,但是@Value也可以用