详解基于Spring Data的领域事件发布
导读:本文共3457字符,通常情况下阅读需要12分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵。一、 手动发布事件// 实体定义@Entitypublic class Department implements Serializable { @Id @GeneratedValue(s... ...
目录
(为您整理了一些要点),点击可以直达。领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵。
使用applicationEventPublisher.publishEvent
在领域服务处理完成后发布领域事件,此方法需要在业务代码中显式发布事件,并在领域服务里引入ApplicationEventPublisher类,但对领域服务本身有一定的入侵性,但灵活性较高。
此方法实事件类型定义在实体中,与领域服务完全解耦,没有入侵。系统会在orderRepository.save(saleOrder)后自动调用事件发布,另delete方法不会调用事件发布。
@EventListener没有事务支持,只要事件发出就可监控到
上述情况会造成事务失败回滚,但事件监控端已经执行,可能导致数据不一致的情况发生
2. 使用@TransactionalEventListener监听事件
使用TransactionPhase.AFTER_COMMIT
可在事务完成后,再执行事件监听方法,从而保证数据的一致性
由于@DomainEvents作用在实体上的,只有刚orderRepository.save(saleOrder)执行成功后才会发送事件,故AFTER_ROLLBACK方法只会在同一事务中其它语句执行失败或显式rollback时才会执行,如果save方法执行失败,将不会监听到回滚事件。
4. @Async异步事件监听
在分布式结构下,通过MQ发送事件通知给其它服务,为解决一致性问题,防止对方服务处理失败可先将事件保久化到数据库后,再重试。
到此这篇关于详解基于Spring Data的领域事件发布的文章就介绍到这了,更多相关Spring Data 领域事件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
详解基于Spring Data的领域事件发布的详细内容,希望对您有所帮助,信息来源于网络。