日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

關于自定義監聽器 onApplicationEvent方法被執行多次的問題

作者:神筆碼靚 更新時間: 2022-07-13 編程語言

這里寫自定義目錄標題

  • 說明
  • 1.自定義監聽器
    • 1.1 自定義事件
    • 2. 定義監聽器
    • 3.配置監聽器
    • 4. 發布事件
    • 5. 啟動項目測試結果
    • 6. 處理方法

說明

在最近項目開發中,需要在原有項目的基礎上需要對原有部分業務數據添加監控功能。所以第一時間想到了使用監聽器,事件觸發機制解決。沒想到在自定義事件和添加監聽器功能后,測試代碼出現了onApplicationEvent 事件被多次執行的問題。項目是 spring cloud,查閱資料說是由于有多個容器的原因。這里特別記錄下解決方式。

1.自定義監聽器

1.1 自定義事件


public class WayBillPlanEvent  extends ApplicationEvent {

    private String helloStr ="這是測試 監聽器 事件定義內容 ";

    public WayBillPlanEvent(Object source) {
        super(source);
    }


    public String getHelloStr() {
        return helloStr;
    }

    public void setHelloStr(String helloStr) {
        this.helloStr = helloStr;
    }
}

2. 定義監聽器

@Component
public class WayBillPlanEventListener{

@Component
public class WayBillPlanEventListener implements ApplicationListener<WayBillPlanEvent> {


    @Async
    public void onApplicationEvent(WayBillPlanEvent wayBillPlanEvent) {
        System.out.println("WayBillPlanEventListener : " + wayBillPlanEvent.getSource().toString() + wayBillPlanEvent.getHelloStr());
    }
}

3.配置監聽器

監聽器配置有多種方式,這里通過 spring.factories 文件配置,
注意,文件路徑為 \resources\META-INF\spring.factories
文件內容:

org.springframework.context.ApplicationListener=\
com.onitor.listeners.WayBillPlanEventListener

4. 發布事件


    @Resource
    private ApplicationContext applicationContext;


	public void listenerNoticeServiceImpl(){
 		WayBillPlanEvent wayBillPlanEvent = new WayBillPlanEvent(this);
        applicationContext.publishEvent(wayBillPlanEvent);

    }

5. 啟動項目測試結果

監聽器的 onApplicationEvent 方法被執行了多次。
在這里插入圖片描述

6. 處理方法

通過注解 @EventListener 可解決 onApplicationEvent 被執行多次的問題。注意通過 @EventListener 注解 需刪除 \resources\META-INF\spring.factories 中 ApplicationListener 的配置。

代碼


@Component
public class WayBillPlanEventListener{


    @EventListener
    @Async
    public void onApplicationEvent(WayBillPlanEvent wayBillPlanEvent) {
        System.out.println("WayBillPlanEventListener : " + wayBillPlanEvent.getSource().toString() + wayBillPlanEvent.getHelloStr());
    }
}

在這里插入圖片描述

原文鏈接:https://blog.csdn.net/daxues_/article/details/125408630

欄目分類
最近更新