处理逻辑:
自定义事件(包含需要需要的数据体)---> 自定义监听器(可以通过泛型限制需要监听的事件,当然也可以不涉及) ---> 向IOC中发布事件 ---> 在监听器中完成实际业务的处理过程。
1、自定义事件。
继承ApplicationEvent
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; } }
2、模拟南向采集任务
2.1 spring boot 中的ioc容器
ConfigurableApplicationContext application = SpringApplication.run(SmalprocesssApplication.class, args);
启动定时任务:
定时任务: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 }
3、自定义监听器
实现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 * 1、可以通过泛型指定具体监听哪一类事件 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 }