欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?@EventListener?異步中使用condition的問(wèn)題及處理

 更新時(shí)間:2021年12月28日 14:29:09   作者:蒙蒙大川  
這篇文章主要介紹了Spring?@EventListener?異步中使用condition的問(wèn)題及處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@EventListener 異步中使用condition的問(wèn)題

@EventListener是spring在4.2+推出的更好的使用spring事件架構(gòu)的方式,并且異步方式也很好設(shè)定

但是在spring4.2.7版本上使用eventlistener的condition 的使用需要注意以下情況可能失效:

condition 使用例子如

@EventListener(condition = "#event.isAsync")

1. 需要對(duì)同一個(gè)事件進(jìn)行區(qū)分同步異步

2. 使用condition來(lái)進(jìn)行過(guò)濾

例如:

需要對(duì)事件用condition進(jìn)行區(qū)分同步異步

@Async
@EventListener(condition = "#event.isAsync")
public void handleOrderCreatedEventAsync(TestEvent event) {  
}  
 
@EventListener(condition = "#event.isAsync == false")
public void handleOrderCreatedEvent(TestEvent event) {  
}  

修正的做法,是使用兩個(gè)事件區(qū)分即

@Async
@EventListener
public void handleOrderCreatedEventAsync(TestEventAsync event) {  
}  
 
@EventListener
public void handleOrderCreatedEvent(TestEvent event) {  
}  

還不清楚,在更高的版本上是否已經(jīng)有進(jìn)一步的修正,待以后研究

Spring事件的condition使用說(shuō)明

在開(kāi)發(fā)中使用了spring的事件機(jī)制,但是發(fā)現(xiàn)了一個(gè)問(wèn)題:如果多個(gè)發(fā)布的事件對(duì)象是同一個(gè)類(lèi)型,而除了使用了這個(gè)事件類(lèi)型作為參數(shù)的事件處理方法還是多個(gè),那就無(wú)法區(qū)分到底要執(zhí)行哪個(gè)處理方法了,除非你想每個(gè)處理方法都執(zhí)行。

如下是我的事件處理代碼聲明

@Async
 @EventListener
 public void handleExport(ExportExcelMessage<DTO> exportMsg){
}

這里的業(yè)務(wù)場(chǎng)景是異步導(dǎo)出Excel。直接用@EventListener來(lái)聲明事件處理方法。

在controller中我如此調(diào)用

publisher.publish(new ExportExcelMessage<>(reqDTO));

ExportExcelMessage是個(gè)事件對(duì)象,包含事件基本屬性,reqDTO就是查詢(xún)條件數(shù)據(jù)了。

開(kāi)始感覺(jué)沒(méi)有問(wèn)題。后來(lái)突然有一個(gè)相同類(lèi)型入?yún)ⅲ╮eqDTO)的導(dǎo)出功能。

這樣處理方法就有問(wèn)題了。出現(xiàn)處理方法的重復(fù)執(zhí)行。

隨便上網(wǎng)一查,簡(jiǎn)單,EventListener直接加condition屬性就搞定。網(wǎng)上是這樣的;

@EventListener(condition="#exportMsg.source=='xxx'")

其中這個(gè)source就是ExportExcelMessage類(lèi)的的一個(gè)屬性,用來(lái)區(qū)分到底是誰(shuí)發(fā)起的事件。

使用SPel表達(dá)式,直接引用的方法的參數(shù)名,單我試驗(yàn)是不行的,異常顯示exportMsg應(yīng)該是個(gè)null。

估計(jì)應(yīng)該能在方法參數(shù)上加注解來(lái)處理吧,就像Contrller的@WebParam一樣,但我一時(shí)也沒(méi)找到。

最后,直接看人家的代碼注釋?zhuān)?。。。自己笨的可以了?/p>

如下就解決了

@EventListener(condition = "#root.args[0].source == 'xxx'")

root.args就是參數(shù)的數(shù)組,直接用下標(biāo)取就好了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Maven倉(cāng)庫(kù)分類(lèi)的優(yōu)先級(jí)

    Maven倉(cāng)庫(kù)分類(lèi)的優(yōu)先級(jí)

    本文主要介紹了Maven倉(cāng)庫(kù)分類(lèi)的優(yōu)先級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java實(shí)現(xiàn)簡(jiǎn)單QQ登錄界面

    java實(shí)現(xiàn)簡(jiǎn)單QQ登錄界面

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單QQ登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java線程池的四種拒絕策略詳解

    Java線程池的四種拒絕策略詳解

    jdk1.5 版本新增了JUC并發(fā)編程包,極大的簡(jiǎn)化了傳統(tǒng)的多線程開(kāi)發(fā),下面這篇文章主要介紹了Java線程池的四種拒絕策略的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java實(shí)現(xiàn)Swing組件定制Button示例

    Java實(shí)現(xiàn)Swing組件定制Button示例

    這篇文章主要介紹了Java實(shí)現(xiàn)Swing組件定制Button,涉及java Swing組件Button相關(guān)屬性設(shè)置與使用操作技巧,需要的朋友可以參考下
    2018-01-01
  • JavaWeb項(xiàng)目FullCalendar日歷插件使用的示例代碼

    JavaWeb項(xiàng)目FullCalendar日歷插件使用的示例代碼

    本篇文章主要介紹了JavaWeb項(xiàng)目FullCalendar日歷插件使用的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象其實(shí)很簡(jiǎn)單的,首先我們需要引入jar包,然后在寫(xiě)一個(gè)簡(jiǎn)單的action就好了,接下來(lái)通過(guò)本文給大家介紹struts2通過(guò)action返回json對(duì)象的方法,感興趣的朋友一起看看吧
    2016-09-09
  • java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹

    java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹

    這篇文章主要介紹了java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹的相關(guān)資料, 簡(jiǎn)單工廠模式,又稱(chēng)為靜態(tài)工廠方法(Static Factory Method)模式,它屬于類(lèi)創(chuàng)建型模式,需要的朋友可以參考下
    2017-08-08
  • Java算法之最長(zhǎng)公共子序列問(wèn)題(LCS)實(shí)例分析

    Java算法之最長(zhǎng)公共子序列問(wèn)題(LCS)實(shí)例分析

    這篇文章主要介紹了Java算法之最長(zhǎng)公共子序列問(wèn)題(LCS),結(jié)合實(shí)例形式分析了最長(zhǎng)公共子序列的原理及問(wèn)題解決方法,需要的朋友可以參考下
    2017-11-11
  • Mybatis配置之<environments>配置元素詳解

    Mybatis配置之<environments>配置元素詳解

    這篇文章主要介紹了Mybatis配置之<environments>配置元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)

    解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)

    這篇文章主要介紹了解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論