如何使用@ConditionalOnExpression決定是否生效注釋
@ConditionalOnExpression決定是否生效注釋
因?yàn)橛昧撕脦滋紫㈥?duì)列,我想在配置文件中配置如何開關(guān)切換消息隊(duì)列。
生產(chǎn)者還好,我只要決定讀取配置文件決定用哪個(gè)生產(chǎn)者發(fā)送消息就行,但是rabbitmq的消費(fèi)者是用注解啟動的,所以這個(gè)時(shí)候就用到了@ConditionalOnExpression
#消費(fèi)者總開關(guān),0關(guān)1開 mq.cumsumer.enabled=1 #rocketmq消費(fèi)者開關(guān),true開啟,false關(guān)閉 rocketmq.comsumer.enabled=false #rabbitmq消費(fèi)者開關(guān),true開啟,false關(guān)閉 rabbitmq.comsumer.enabled=true
@Component
@RabbitListener(queues = "monitorDataQueue")
@ConditionalOnExpression("${mq.cumsumer.enabled:0}==1&&${rabbitmq.comsumer.enabled:false}")
布爾值和數(shù)字都還好說,但是字符串相等我搞了半天都不行,最后終于找到了資料
#選擇消費(fèi)者,rocketmq,rabbitmq mq.comsumer=rabbitmq
@Component
@RabbitListener(queues = "monitorDataQueue")
@ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")
一般來說這三種用法已經(jīng)很靈活了,應(yīng)該夠用了
注意
${rabbitmq.consumer.enabled:false}
代表的是當(dāng)
rabbitmq.consumer.enabled
不存在時(shí)默認(rèn)為后面的值,所以如果是boolean值的話直接使用
${rabbitmq.comsumer.enabled}
就行啦~
@ConditionalOnExpression 控制是否初始bean
我們有時(shí)候會遇到一些bean希望通過注冊中心控制是否被初始化,@ConditionalOnExpression可以幫我們辦到。這里寫過小例子。
1、這個(gè)配置是我們上傳文件指定臨時(shí)目錄的配置
這里通過這個(gè)查看是否注入成功。在我們想要注入控制注解添加 @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、在啟動類添加如下代碼進(jìn)行測試
@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、當(dāng)在配置文件application.properties中寫 is.inject=false時(shí)
此時(shí)結(jié)果為,說明@Bean并沒有將配置中的注入

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java弱鍵集合WeakHashMap及ConcurrentCache原理詳解
這篇文章主要介紹了Java弱鍵集合WeakHashMap及ConcurrentCache原理詳解,基于哈希表的Map接口實(shí)現(xiàn),支持null鍵和值,但是WeakHashMap具有弱鍵,可用來實(shí)現(xiàn)緩存存儲,在進(jìn)行GC的時(shí)候會自動回收鍵值對,需要的朋友可以參考下2023-09-09
IDEA2020.3創(chuàng)建web工程的完整步驟
這篇文章主要給大家介紹了關(guān)于IDEA2020.3創(chuàng)建web工程的完整步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
drools規(guī)則動態(tài)化實(shí)踐解析
這篇文章主要為大家介紹了drools規(guī)則動態(tài)化實(shí)踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

