使用@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 Boot集成Milvus快速入门demo示例详解
Milvus是一种高性能向量数据库,支持从笔记本到大型分布式系统的多环境运行,它以开源和云服务形式提供,是LFAI & Data Foundation的项目,采用Apache 2.0许可,Milvus特别支持高并行化和解耦的系统架构,使其能够随数据增长而扩展,支持各种复杂搜索功能,满足企业级AI应用需求2024-09-09
解决springboot3:mybatis-plus依赖错误:org.springframework.beans.fac
这篇文章主要介绍了解决springboot3:mybatis-plus依赖错误:org.springframework.beans.factory.UnsatisfiedDependencyException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文主要介绍了SpringSecurity页面授权与登录验证实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-06-06
SpringBoot无法解析parameter参数问题的解决方法
使用最新版的 Springboot 3.2.1(我使用3.2.0)搭建开发环境进行开发,调用接口时出现奇怪的错,本文小编给大家介绍了SpringBoot无法解析parameter参数问题的原因及解决方法,需要的朋友可以参考下2024-04-04
java 较大数据量取差集,list.removeAll性能优化详解
这篇文章主要介绍了java 较大数据量取差集,list.removeAll性能优化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09
使用springboot防止反编译proguard+xjar
介绍了三种代码混淆和加密工具的使用方法:ProGuard、Xjar和ClassFinal,ProGuard用于混淆Java字节码,Xjar提供对JAR包内资源的加密和动态解密,而ClassFinal则支持直接加密JAR包或WAR包,通过预研和实际操作2024-11-11


最新评论