ApplicationEventPublisher异步处理事件
ApplicationEventPublisher是一个标准的观察者模式,好处我认为就是可以把业务分离开,也可以通过异步来发送Event,这样主流程就不用关系Event中具体啥时候做了啥事,主流程只发布个Event就可以了,也不会阻塞主流程的进行,比如记录日志操作,或者调用一个第三方接口这种有时间消耗的操作都可以交给Listener慢慢儿处理(有点像新建了个线程)。
1、创建Event集成ApplicationEvent
参数为Event中想要携带的数据,比如:
可以根据需要随意写
2、在需要发布Event的位置注入ApplicationEventPublisher
3、构造Event、参数、发布Event
4、创建监听类实现ApplicationListener接口,监听Event,泛型为刚刚发布的Event
5、实现onApplicationEvent方法处理业务
6、启动类开启异步处理
7、测试一下
项目中通过切面切入每个Controller,并且记录用户的操作日志,同时异步发送给Syslog服务器和记录在本地数据库,其中入库和发送Syslog交给Listener处理。
随便来个登陆操作:
切面中获取到了用户具体的操作、IP、balabala…
检查下数据库和syslog数据库有没有数据
,