使用@ConditionalOnProperty控制是否加载的操作

 更新时间:2021年06月11日 15:44:42   作者:纯真-Cloud  
这篇文章主要介绍了使用@ConditionalOnProperty控制是否加载的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@ConditionalOnProperty控制是否加载

public interface OSService {
	void os();
}
 
@ConditionalOnProperty(prefix = "custom.os", name = "name", havingValue = "linux")
@Service("osService")
public class LinuxService implements OSService {
	
	@Override
	public void os() {
		System.out.println("Now OS is Linux!");
	}
}
 
@ConditionalOnProperty(prefix = "custom.os", name = "name", havingValue = "windows")
@Service("osService")
public class WindowsService implements OSService {
	@Override
	public void os() {
		System.out.println("Now OS is Windows!");
	}
}
 
@RequestMapping(path = "test")
@RestController
public class TempRestController {
 
	@Autowired
	OSService osService;
	@PostMapping(path = "condition")
	public void condition() {
		osService.os();
	}
}

配置文件 application.yml:

custom:
   os:
      name: linux

@ConditionalOnProperty的作用及用法

在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效。

配置类代码:

@Configuration
@ConditionalOnProperty(prefix = "filter",name = "loginFilter",havingValue = "true")
public class FilterConfig {
 //prefix为配置文件中的前缀,
 //name为配置的名字
 //havingValue是与配置的值对比值,当两个值相同返回true,配置类生效.
    @Bean
    public FilterRegistrationBean getFilterRegistration() {
        FilterRegistrationBean filterRegistration  = new FilterRegistrationBean(new LoginFilter());
        filterRegistration.addUrlPatterns("/*");
        return filterRegistration;
    }
}

配置文件中的代码

filter.loginFilter=true

测试

当配置文件中值为true时:输出了"过滤器"三个字,说明loginFilter生效了,说明配置类生效了。

在这里插入图片描述

当配置文件中值为false时:没有输出了"过滤器"三个字,说明loginFilter没有生效,说明配置类没有生效。

在这里插入图片描述

总结:

通过@ConditionalOnProperty控制配置类是否生效,可以将配置与代码进行分离,实现了更好的控制配置。

@ConditionalOnProperty实现是通过havingValue与配置文件中的值对比,返回为true则配置类生效,反之失效。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring 异步接口返回结果的四种方式

    Spring 异步接口返回结果的四种方式

    这篇文章主要介绍了Spring 异步接口返回结果的四种方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-08-08
  • java调用ffmpeg实现视频转换的方法

    java调用ffmpeg实现视频转换的方法

    这篇文章主要介绍了java调用ffmpeg实现视频转换的方法,较为详细分析了java视频格式转换所需要的步骤及具体实现技巧,需要的朋友可以参考下
    2015-06-06
  • Spring Boot集成Milvus快速入门demo示例详解

    Spring Boot集成Milvus快速入门demo示例详解

    Milvus是一种高性能向量数据库,支持从笔记本到大型分布式系统的多环境运行,它以开源和云服务形式提供,是LFAI & Data Foundation的项目,采用Apache 2.0许可,Milvus特别支持高并行化和解耦的系统架构,使其能够随数据增长而扩展,支持各种复杂搜索功能,满足企业级AI应用需求
    2024-09-09
  • SpringMVC之@InitBinder注解详解

    SpringMVC之@InitBinder注解详解

    这篇文章主要介绍了SpringMVC之@InitBinder注解详解,springmvc并不是能对所有类型的参数进行绑定的,如果对日期Date类型参数进行绑定,就会报错IllegalStateException错误,需要的朋友可以参考下
    2024-01-01
  • Mybatis中typeAliases的使用

    Mybatis中typeAliases的使用

    这篇文章主要介绍了Mybatis中typeAliases的使用,需要的朋友可以参考下
    2017-08-08
  • 解决springboot3:mybatis-plus依赖错误:org.springframework.beans.factory.UnsatisfiedDependencyException

    解决springboot3:mybatis-plus依赖错误:org.springframework.beans.fac

    这篇文章主要介绍了解决springboot3:mybatis-plus依赖错误:org.springframework.beans.factory.UnsatisfiedDependencyException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文主要介绍了SpringSecurity页面授权与登录验证实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • SpringBoot无法解析parameter参数问题的解决方法

    SpringBoot无法解析parameter参数问题的解决方法

    使用最新版的 Springboot 3.2.1(我使用3.2.0)搭建开发环境进行开发,调用接口时出现奇怪的错,本文小编给大家介绍了SpringBoot无法解析parameter参数问题的原因及解决方法,需要的朋友可以参考下
    2024-04-04
  • java 较大数据量取差集,list.removeAll性能优化详解

    java 较大数据量取差集,list.removeAll性能优化详解

    这篇文章主要介绍了java 较大数据量取差集,list.removeAll性能优化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 使用springboot防止反编译proguard+xjar

    使用springboot防止反编译proguard+xjar

    介绍了三种代码混淆和加密工具的使用方法:ProGuard、Xjar和ClassFinal,ProGuard用于混淆Java字节码,Xjar提供对JAR包内资源的加密和动态解密,而ClassFinal则支持直接加密JAR包或WAR包,通过预研和实际操作
    2024-11-11

最新评论