Spring注解之-@ConditionalOnExpression表达式
@ConditionalOnExpression("'true")
当括号中的内容为true时,使用该注解的类被实例化,支持语法如下:
@ConditionalOnExpression("${mq.cumsumer.enabled}==1&&${rabbitmq.comsumer.enabled:true}")
@ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")
@ConditionalOnExpression("'${application.customize}'.equals('EDGE')||${app.chain.enabled:'false'}")
我们需要“逻辑或”
- 首先一个类是不能标注多个相同annotation的,编译通不过。
@Order(1)
@Component
️@ConditionalOnProperty(name="app.initialize.dictionary", havingValue="true")
️@ConditionalOnProperty(name="app.initialize.all", havingValue="true")
public class DictionaryInitializer implements CommandLineRunner
- @ConditionalOnProperty 本身也并没有这样的功能
- 一种繁琐的做法,是自定义条件,继承AnyNestedCondition
class DicOrAllCondition extends AnyNestedCondition {
public DicOrAllCondition() {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
@ConditionalOnProperty(name = "app.initialize.dictionary", value = "true")
static class DicCondition {
}
@ConditionalOnProperty(name = "app.initialize.all", value = "true")
static class AllCondition {
}
}
@Order(1)
@Component
@Conditional(DicOrAllCondition.class)
public class DictionaryInitializer implements CommandLineRunner{}
- 还有一种比较灵活的方式是使用@ConditionalOnExpression写一个表达式
@Order(1)
@Component
@ConditionalOnExpression("${app.initialize.dictionary:false} || ${app.initialize.all:false}")
public class DictionaryInitializer implements CommandLineRunner{}
精益无止境,其实还有更灵活的配置方式:除了dictionary其他都导入:
app.initialize.all=true
app.initialize.dictionary=false
换种说法就是:如果局部有配置,则按局部配置处理。如果局部没配置,则按全局配置处理。如果全局、局部都没配置,则默认不导入。这里可以利用“默认值”嵌套表达式实现。
@ConditionalOnExpression("${app.initialize.dictionary:${app.initialize.all:false}}")
Spring注解之-@ConditionalOnExpression表达式的更多相关文章
- spring注解说明之Spring2.5 注解介绍(3.0通用)
spring注解说明之Spring2.5 注解介绍(3.0通用) 注册注解处理器 方式一:bean <bean class="org.springframework.beans.fac ...
- [转]Spring 注解总结
原文地址:http://blog.csdn.net/wangshfa/article/details/9712379 一 注解优点?注解解决了什么问题,为什么要使用注解? 二 注解的来龙去脉(历史) ...
- Spring 注解总结
声明:这是转载的.内容根据网上资料整理.相关链接:http://www.360doc.com/content/10/1118/16/2371584_70449913.shtmlhttp://www.i ...
- (转)Spring注解完成Bean的定义
使用Spring注解完成Bean的定义 2010-04-21 16:48:54| 分类: spring|举报|字号 订阅 下载LOFTER客户端 通过@Autowired或@Reso ...
- spring aop中pointcut表达式完整版
spring aop中pointcut表达式完整版 本文主要介绍spring aop中9种切入点表达式的写法 execute within this target args @target @with ...
- Spring 注解方式引入配置文件
配置文件,我以两种为例,一种是引入Spring的XML文件,另外一种是.properties的键值对文件: 一.引入Spring XML的注解是@ImportResource @Retention(R ...
- spring注解扫描组件注册
最近对单点系统进行微服务拆分,被各个springboot的组件注册搞得云里雾里的.(有的是通过springboot的自动配置进IOC容器的,有的是自己添加构造方法添加进IOC容器.)决定抽时间将spr ...
- Spring注解实现定时功能以及Quartz定时器
一:Spring注解实现--------->Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz 1:maven配置: <!-- quartz--> <d ...
- Spring注解驱动(上)
记录常用的spring注解 1.@Configuration 和 @Bean spring中可以使用xml 的方式进行配置, 也可以使用 @ Configuration 来指定一个类为配置类, 并使用 ...
- Spring注解开发系列Ⅵ --- AOP&事务
注解开发 --- AOP AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,横向重复,纵向抽取.详细的AO ...
随机推荐
- 基于腾讯云短信接口和nodejs服务器实现手机号验证码
知识储备:js基础.nodejs基础.ajax基础: 1. 手机验证码原理 表单提交,把手机号码传送到后端:后端拿到手机号码后根据相关算法随机形成一个验证码,并将其保存在数据库:用户拿到验证码后将验证 ...
- 《使用Gin框架构建分布式应用》阅读笔记:p52-p76
<用Gin框架构建分布式应用>学习第4天,p32-p76总结,总计25页. 一.技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开 ...
- KubeSphere 社区双周报 | 2023.12.21-2024.01.04
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- LLM应用实战: OpenAI多代理新作-Swarm
1.背景 本qiang~关注到OpenAI两周前发布的轻量级多代理框架Swarm,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会~ 源码非常简单,各位看官们可以小读一下,本文采用 ...
- 什么是WEB3.0
WEB1.0 90年代末期创建的搜狐,新浪等门户网站的特点是向用户推送信息,门户网站显示什么我们看什么,这个时代称为web1.0.WEB2.0随着技术的发展,用户可以在网上进行互动,可以在网站上发表个 ...
- Robot_Parkour_Learning分享报告关键词记录
fraction noise minecraft perlin noise 作为一种fraction noise 跑酷 深度相机,不然被挡住不知道是要下蹲还是要跳过去 issacGym的激光雷达的模拟 ...
- Redis的ZSet底层数据结构,ZSet类型全面解析
文章目录 一.ZSet有序集合类型 1.1 简介 1.2 应用场景 1.3 底层结构 1.4 ZSet常用命令 二.ZSet底层结构详解 2.1 数据结构 2.2 压缩列表ZipList 2.3 跳表 ...
- @Transactional事务,太坑了吧!
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据 ...
- 3-3 C++ vector类型
目录 3.3.0 模板(Template) vector说明 模板简介 3.3.1 vector的定义和初始化 初始化的方式 总结初始化 3.3.2 往vector中添加元素 3.3.3 vector ...
- Anaconda安装流程
参考这篇博客,自己做一个记录而已anaconda安装 https://blog.csdn.net/Q_fairy/article/details/129158178