如何使用@ConditionalOnExpression决定是否生效注释
@ConditionalOnExpression决定是否生效注释
因为用了好几套消息队列,我想在配置文件中配置如何开关切换消息队列。
生产者还好,我只要决定读取配置文件决定用哪个生产者发送消息就行,但是rabbitmq的消费者是用注解启动的,所以这个时候就用到了@ConditionalOnExpression
#消费者总开关,0关1开 mq.cumsumer.enabled=1 #rocketmq消费者开关,true开启,false关闭 rocketmq.comsumer.enabled=false #rabbitmq消费者开关,true开启,false关闭 rabbitmq.comsumer.enabled=true
@Component @RabbitListener(queues = "monitorDataQueue") @ConditionalOnExpression("${mq.cumsumer.enabled:0}==1&&${rabbitmq.comsumer.enabled:false}")
布尔值和数字都还好说,但是字符串相等我搞了半天都不行,最后终于找到了资料
#选择消费者,rocketmq,rabbitmq mq.comsumer=rabbitmq
@Component @RabbitListener(queues = "monitorDataQueue") @ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")
一般来说这三种用法已经很灵活了,应该够用了
注意
${rabbitmq.consumer.enabled:false}
代表的是当
rabbitmq.consumer.enabled
不存在时默认为后面的值,所以如果是boolean值的话直接使用
${rabbitmq.comsumer.enabled}
就行啦~
@ConditionalOnExpression 控制是否初始bean
我们有时候会遇到一些bean希望通过注册中心控制是否被初始化,@ConditionalOnExpression可以帮我们办到。这里写过小例子。
1、这个配置是我们上传文件指定临时目录的配置
这里通过这个查看是否注入成功。在我们想要注入控制注解添加 @ConditionalOnExpression("${is.inject:true}"),通过配置文件来控制是否注入。
@Configuration public class PropertyConfig { @Bean @ConditionalOnExpression("${is.inject:true}") public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("C:\\Users\\Administrator\\Desktop\\deploy"); return factory.createMultipartConfig(); } }
2、在启动类添加如下代码进行测试
@SpringBootApplication public class DynamicElasticjobApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(DynamicElasticjobApplication.class, args); } @Autowired private ApplicationContext applicationContext; @Override public void run(String... args) { MultipartConfigElement bean = applicationContext.getBean(MultipartConfigElement.class); System.out.println("::::::::::::::"+bean.getLocation()); } }
3、启动为Application类,说明@Bean将其注入
4、当在配置文件application.properties中写 is.inject=false时
此时结果为,说明@Bean并没有将配置中的注入
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
2022年最新java 8 ( jdk1.8u321)安装图文教程
这篇文章主要介绍了2022年最新java 8 ( jdk1.8u321)安装图文教程,截止2022年1月,官方出的jdk1.8目前已更新到8u321的版本,本文通过图文并茂的形式给大家介绍安装过程,需要的朋友可以参考下2022-08-08Java8 Supplier接口和Consumer接口原理解析
这篇文章主要介绍了Java8 Supplier接口和Consumer接口原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-04-04SpringBoot Actuator未授权访问漏洞修复详解
这篇文章主要介绍了SpringBoot Actuator未授权访问漏洞修复详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08
最新评论