前言:

前边发文,我们讲过了自定义注解(如果没有看过的可以去历史发文里面去看一下),并且自己动手建了一个注解,因此大致了解了自定义注解的原理以及使用方法。

本篇发文我们再来说一个spring里面已有的,有关配置项生效与否的注解:@ConditionalOnProperty,当然了不用这个注解你的配置项还是可以一直生效的,只是不太安全而已,用不好会加重spring的负担。

我们平常在springboot配置文件applicatio.propertiey或则是application.yml里面都会写上数据源,redis,rabbitmq等的连接项。但是你写完这些配置项后,如何动态的控制它的生效与否呢?你学会了如何去控制它,这样对spring里面的装配机制又会有更深一步的了解。对于我们以后的自身发展都是有好处的。

正文:

前边又是照例说了一堆废话,下面我们进入正文。

1. 原生注解ConditionalOnProperty源码

springboot获取根路径_springboot获取配置文件的值_springboot获取ehcache

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模式启动代码查看是否成效

springboot获取配置文件的值_springboot获取根路径_springboot获取ehcache

结果:

可见配置并没有生效。

第二种情况:

havingValue = "java"

springboot获取配置文件的值_springboot获取根路径_springboot获取ehcache

Debug模式启动代码查看是否成效

springboot获取根路径_springboot获取配置文件的值_springboot获取ehcache

结果:

可见配置生效。

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模式启动代码查看是否成效

springboot获取根路径_springboot获取ehcache_springboot获取配置文件的值

结果:

可见配置并没有生效。

第二种情况:

prefix = "test"

springboot获取配置文件的值_springboot获取根路径_springboot获取ehcache

Debug模式启动代码查看是否成效

结果:

可见配置生效。

说明:

这里用到prefix+name是所谓的“双向校验”,如果你只是写了配置项,代码里面用的不对,那么配置项也是不会生效的springboot获取配置文件的值,这就需要使用者正确无误的使用配置项的定义。

补充解释:

prefix,name,value, havingValue还有其他的组合用法,这里不再举例。

有关条件注解还有:

有兴趣的同学可以去深入了解。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410