一、@ConditionalOnProperty作用及用法
在Spring Boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty
注解来控制@Configuration
是否生效。
通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。
- 如果该值为空,则返回false;
- 如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
- 如果返回值为false,则该configuration不生效;为true则生效。
二、@ConditionalOnProperty的功能
它主要是通过自身的两个属性来控制自动配置是否生效,这两个属性分别是name、havingValue。只有当配置文件(application.properties或者bootstrap.yml)中和name相同的属性的值和注解上havingValue的值相同时,该配置文件才会生效,如下方代码:
@ConditionalOnProperty(value = "muyichen.auth.test", havingValue = "true")
@Component
public class AuthorizationFilterImpl implements AuthorizationFilter {
//具体的过滤逻辑
}
配置文件
muyichen.auth.test=true
三、跳坑
3.1 问题描述
尝试给两个以上的过滤器添加该属性时,应用程序启动报错。
3.2 解决方案
可以给某个主要的配置类加上@Primary
注解来标示出该配置类是主配置类,当其它配置类与该类冲突时,以该类为主。这样就可以解决上述问题了。
网友评论