springboot自定义事件的发布和监听
时间:2019-07-04
本文章向大家介绍springboot自定义事件的发布和监听,主要包括springboot自定义事件的发布和监听使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 创建自定义事件 继承 ApplicationEvent
package wyp.eventspringbootdemo.wyp; import org.springframework.context.ApplicationEvent; /** * @author : miles wang * @date : 2019/7/4 11:43 AM */ public abstract class AbstractEvent extends ApplicationEvent { public AbstractEvent(Object source) { super(source); } }
package wyp.eventspringbootdemo.wyp; /** * @author : miles wang * @date : 2019/6/25 5:33 PM */ public class MyApplicationEvent1 extends AbstractEvent { public MyApplicationEvent1(Object source) { super(source); } //TODO do some thing 我们可以添加字段添加方法,比如写入redis的key等等 }
package wyp.eventspringbootdemo.wyp; /** * @author : miles wang * @date : 2019/6/25 5:33 PM */ public class MyApplicationEvent2 extends AbstractEvent { public MyApplicationEvent2(Object source) { super(source); } }
2 编写监听者
package wyp.eventspringbootdemo.wyp; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; /** * 这里提供一种监听事件的思路 * 我们会在系统中发布不同的事件,但是我们可以写一个监听器 * 1 写一个抽象类 AbstractEvent * 2 所有事件都继承AbstractEvent * 3 获取子类名称 * 4 处理对应的事件 */ @Component public class MyApplicationListener2 { @EventListener public void handleAbstractEvent(AbstractEvent object){ String simpleName = object.getClass().getSimpleName(); switch (simpleName){ case EventTypeConstnts.SOME_EVENt_NAME1: System.out.println("this is :"+simpleName); //TODO do someting :consume event break; case EventTypeConstnts.SOME_EVENt_NAME2: System.out.println("this is :"+simpleName); break; default: return; } System.out.println(simpleName); } }
3 启动类
package wyp.eventspringbootdemo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ConfigurableApplicationContext; import wyp.eventspringbootdemo.wyp.MyApplicationEvent1; import wyp.eventspringbootdemo.wyp.MyApplicationEvent2; import wyp.eventspringbootdemo.wyp.MyApplicationListener1; @SpringBootApplication public class EventSpringbootDemoApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(EventSpringbootDemoApplication.class, args); // SpringApplication springApplication = new SpringApplication(EventSpringbootDemoApplication.class); // springApplication.addListeners(new MyApplicationListener1()); // ConfigurableApplicationContext run = springApplication.run(args); // run.publishEvent(new MyApplicationEvent1("这是一个event")); // run.close(); run.publishEvent(new MyApplicationEvent1("这是一个event1")); run.publishEvent(new MyApplicationEvent2("这是一个event2")); run.close(); } }
4 跨服务监听事件思路
我们可以编写一个类 负责把spring的event发送到我们的事件中心系统中, 也就是kafka当中 这样不同的服务可以消费kafka
5 测试结果 注意控制台打印顺序
原文地址:https://www.cnblogs.com/wangpipi/p/11134175.html
- 使用Python和Tesseract来识别图形验证码
- 高并发服务器的设计--连接池的设计
- Pwnable.tw刷题之Silverbullet破解过程分享
- 鸡肋CSRF和Self-XSS组合的变废为宝
- 简易--go语言redis连接池
- Golang中channel使用的一些小技巧
- Go语言的管道Channel用法实例
- 【数据库】MySQL进阶二、索引简易教程
- 【数据库】MySQL进阶六、模糊查询用法
- 【选择题】Java基础测试九(16道)
- 用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇
- 【编程题】Java编程题五(10道)
- 如何有效地对Docker的镜像进行管理?
- go语言的多核并行化例子
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- MapReduce工作笔记——Job调度参数设置
- 矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)
- Macdown中[toc]无法生成目录解决方法
- Linux实用技巧——mkdir创建多级新目录
- C++核心准则T.43: 定义别名时,using比typedef更好
- C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)
- python函数——浅拷贝copy()以及深拷贝deepcopy()
- 数据结构算法操作试题(C++/Python)——两数之和
- C++核心准则T.46:要求模板参数最少是正规或半正规的
- python函数——List获取索引(多相同值解决方法)
- C++核心准则T.47:避免使用通用名称的高度不受限模板
- python函数——字符串字母大小判断
- Day 6:旋转数组的最小数字
- MapReduce工作笔记——yarn reducer 内存溢出 beyond physical memory limits
- Linux实用技巧——find查找指定时间内修改过的文件或目录