前言:
前边发文,我们讲过了自定义注解(如果没有看过的可以去历史发文里面去看一下),并且自己动手建了一个注解,因此大致了解了自定义注解的原理以及使用方法。
本篇发文我们再来说一个spring里面已有的,有关配置项生效与否的注解:@ConditionalOnProperty,当然了不用这个注解你的配置项还是可以一直生效的,只是不太安全而已,用不好会加重spring的负担。
我们平常在springboot配置文件applicatio.propertiey或则是application.yml里面都会写上数据源,redis,rabbitmq等的连接项。但是你写完这些配置项后,如何动态的控制它的生效与否呢?你学会了如何去控制它,这样对spring里面的装配机制又会有更深一步的了解。对于我们以后的自身发展都是有好处的。
正文:
前边又是照例说了一堆废话,下面我们进入正文。
1. 原生注解ConditionalOnProperty源码
2. 注解说明
该注解主是通过prefix,name,value, havingValue这几项来控制你的配置项configuration是否生效的。
3. 注解常规用法之(name+havingValue)
1)通过属性name和havingValue来控制某个configuration是否生效。
其中name用来读取application.properties或者application.yml中的某个属性值。
如果该值为空,则返回false,即configuration不生效
如果值不为空,则将该值与havingValue指定的值进行比较,相同则返回true,configuration生效;否则返回false,configuration不生效。
举例验证:
① 在application.yml里面添加配置项
Test:
confi:
java
② 编写测试代码TestConfiguration.java
TestConfiguration.java完整代码如下:
package com.bj.hydra.config; import com.bj.hydra.dto.CurrentUserDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @package: com.bj.hydra.config * @description: 注解测试 * @author: YixinCapital--@IT讲坛 * @create: 2019-01-04 10:36 **/ @Configuration @Slf4j @ConditionalOnProperty(name="test.confi",havingValue = "java") public class TestConfiguration { @Bean(name="testDTO") public CurrentUserDTO getCTestConfigurationurrentUserDTO(){ log.info("==========获取注解测试返回当前user"); CurrentUserDTO currentUserDTO=new CurrentUserDTO(); currentUserDTO.setUserAccount("it"); currentUserDTO.setUserName("讲坛"); return currentUserDTO; } }
第一种情况:
havingValue = "it"
Debug模式启动代码查看是否成效
结果:
可见配置并没有生效。
第二种情况:
havingValue = "java"
Debug模式启动代码查看是否成效
结果:
可见配置生效。
4. 注解多配置项用法之(prefix+name)
1)通过属性name和prefix来控制某个configuration是否生效。
其中prefix是配置项的前缀,如果前缀就写错了springboot获取配置文件的值,则无需校验name直接返回false,即configuration不生效。
如果值prefix写对了,name写错了,一样是返回false。
只有这两项均写对了,则返回true,configuration生效。
③ 在application.yml里面添加配置项
Test:
confi:
java
confi2:
php
④ 修改测试代码TestConfiguration.java
修改TestConfiguration.java代码如下:
@ConditionalOnProperty(prefix = “test”, name={“confi”,”confi2″})
第一种情况:
prefix = "test1"
Debug模式启动代码查看是否成效
结果:
可见配置并没有生效。
第二种情况:
prefix = "test"
Debug模式启动代码查看是否成效
结果:
可见配置生效。
说明:
这里用到prefix+name是所谓的“双向校验”,如果你只是写了配置项,代码里面用的不对,那么配置项也是不会生效的springboot获取配置文件的值,这就需要使用者正确无误的使用配置项的定义。
补充解释:
prefix,name,value, havingValue还有其他的组合用法,这里不再举例。
有关条件注解还有:
有兴趣的同学可以去深入了解。
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410