處理邏輯:java
自定義事件(包含須要須要的數據體)---> 自定義監聽器(能夠經過泛型限制須要監聽的事件,固然也能夠不涉及) ---> 向IOC中發佈事件 ---> 在監聽器中完成實際業務的處理過程。spring
一、自定義事件。併發
繼承ApplicationEventapp
package com.shanxilgong.linxi.listener; import org.springframework.context.ApplicationEvent; import java.util.HashMap; import java.util.Map; /** * 自定義事件 */ public class MyApplicationEvent extends ApplicationEvent { public MyApplicationEvent(Object source) { super(source); } private Map<String,String> data = new HashMap<String,String>(); public Map<String, String> getData() { return data; } public void setData(Map<String, String> data) { this.data = data; } }
二、模擬南向採集任務ide
2.1 spring boot 中的ioc容器this
ConfigurableApplicationContext application = SpringApplication.run(SmalprocesssApplication.class, args);spa
啓動定時任務:code
定時任務:34行,構建事件對象。37行,向IOC容器中發佈事件。
對象
1 package com.shanxilgong.linxi.listener; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.context.ConfigurableApplicationContext; 5 import org.springframework.stereotype.Component; 6 7 import java.util.HashMap; 8 import java.util.Map; 9 import java.util.TimerTask; 10 11 12 /*** 13 * 該定時任務用於模擬南向週期性採集任務,併發布採集結果事件。 14 */ 15 16 @Component 17 public class MyTimerTask extends TimerTask 18 { 19 20 @Autowired 21 private ConfigurableApplicationContext configurableApplicationContext; 22 23 public MyTimerTask(){ 24 25 } 26 27 @Override 28 public void run() 29 { 30 Map map = new HashMap(); 31 map.put("name","zhangsan"); 32 map.put("age","20"); 33 34 MyApplicationEvent event = new MyApplicationEvent(new Object()); 35 event.setData(map); 36 // spring 的 ioc 容器,發佈事件 37 configurableApplicationContext.publishEvent(event); 38 } 39 }
三、自定義監聽器blog
實現ApplicationListener,並添加須要監聽的事件泛型,如14行。(固然也能夠不添加監聽事件泛型)
1 package com.shanxilgong.linxi.listener; 2 3 import org.springframework.context.ApplicationEvent; 4 import org.springframework.context.ApplicationListener; 5 import org.springframework.stereotype.Component; 6 7 import java.lang.reflect.Method; 8 9 /** 10 * 自定義監聽器 11 * 一、能夠經過泛型指定具體監聽哪一類事件 12 */ 13 14 public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> 15 { 16 @Override 17 public void onApplicationEvent(MyApplicationEvent event) 18 { 19 System.out.println("捕獲的數據爲:"+event.getData()); 20 } 21 }