天天看點

使用@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}")
           

布爾值和數字都還好說,但是字元串相等我搞了半天都不行,最後終于找到了資料

https://stackoverflow.com/questions/26451321/spring-boot-conditionalonproperty-or-conditionalonexpression

#選擇消費者,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}就行

繼續閱讀