如何使⽤@ConditionalOnExpression决定是否⽣效注释@ConditionalOnExpression决定是否⽣效注释
因为⽤了好⼏套消息队列,我想在配置⽂件中配置如何开关切换消息队列。
⽣产者还好,我只要决定读取配置⽂件决定⽤哪个⽣产者发送消息就⾏,但是rabbitmq的消费者是⽤注解启动的,所以这个时候就⽤到了@ConditionalOnExpression
#消费者总开关,0关1开
abled=1
学校里的新鲜事#rocketmq消费者开关,true开启,fal关闭
#rabbitmq消费者开关,true开启,fal关闭
@Component
@RabbitListener(queues = "monitorDataQueue")
@ConditionalOnExpression("${abled:0}==1&&${abled:fal}")
布尔值和数字都还好说,但是字符串相等我搞了半天都不⾏,最后终于找到了资料
凤凰205#选择消费者,rocketmq,rabbitmq
@Component
@RabbitListener(queues = "monitorDataQueue")
@ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")
⼀般来说这三种⽤法已经很灵活了,应该够⽤了
注意
${abled:fal}
代表的是当
表白信息
不存在时默认为后⾯的值,所以如果是boolean值的话直接使⽤
${abled}
就⾏啦~
@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.tLocation("C:\\Urs\\Administrator\\Desktop\\deploy");
ateMultipartConfig();
}
}
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 args) {
MultipartConfigElement bean = Bean(MultipartConfigElement.class); System.out.println("::::::::::::::"+Location());
}
}
3、启动为Application类,说明@Bean将其注⼊
4、当在配置⽂件application.properties中写 is.inject=fal时此时结果为,说明@Bean并没有将配置中的注⼊
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。