@TransactionalEventListener的使用
标签: @TransactionalEventListener的使用
2023-04-14 18:23:22 234浏览
@TransactionalEventListener的使用
一、使用
1.1 创建EventObject(事件状态对象)
用于 listener 的相应的方法之中,作为参数,一般存在于listerner 的方法之中
创建一个类,继承 org.springframework.context.ApplicationEvent
例如:创建一个项目初始化的事件对象
package cn.xxx.xxxx.service.event;
import org.springframework.context.ApplicationEvent;
public class ProjectInitEvent extends ApplicationEvent {
/**
* x项目编码
*/
private String projectCode;
public ProjectInitEvent(String projectCode,Object source) {
super(source);
this.projectCode = projectCode;
}
public String getProjectCode() {
return projectCode;
}
public void setProjectCode(String projectCode) {
this.projectCode = projectCode;
}
}
1.2 使用@TransactionalEventListener处理监听到的事件
例如:当把所有的事务事件的监听都放在一起处理,可以创建一个TransactionalListener.class类
package cn.xxx.xxxx.service.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
import cn.xxx.xxxx.service.ProjectService;
@Component
@Slf4j
public class TransactionalListener {
@Autowired
private ProjectService projectService;
@TransactionalEventListener
public void projectInit(ProjectInitEvent event) throws GcpPlatformException {
//处理对应的事件逻辑,比如这里是 项目初始化的监听,处理项目初始化的逻辑即可
projectService.init(event.getProjectCode());
}
}
1.3 在对应的业务逻辑中发送事件
在一个事物的方法中,使用ApplicationEventPublisher的publishEvent方法,即可发送事件对象
例如:
...
import org.springframework.context.ApplicationEventPublisher;
import cn.xxx.xxxx.service.event.ProjectInitEvent;
import org.springframework.transaction.annotation.Transactional;
....
//某个事物方法
@Transactional(rollbackFor = Exception.class)
public void initProject(XXXX req){
...
String projectCode = ...
....
//发送事件
publisher.publishEvent(new ProjectInitEvent(projectCode, this));
...
}
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论
