1、 创建实体类
@Data
public class LiveActivityAddModel {
/**
* 数据保存id集合
*/
private List<String> liveListAdd;
/**
* 商会ckey
*/
private String ckey;
/**
* 1-主推,2-分类,3-活动报名模块
*/
private Integer type;
/**
* 分类id
*/
private Integer classifyId;
/**
* 业务类型, 1-活动,2-直播
*/
private Integer businessType;
}
2、定义一个名为LiveEvent
的类,该类继承自ApplicationEvent
。它表示一个自定义的事件,用于在应用程序中发布和传递信息,构造方法LiveEvent(Object source, LiveActivityAddModel liveActivityAddModel)
,它继承了ApplicationEvent
的构造方法,并接受两个参数:source
表示事件的来源,liveActivityAddModel
表示与事件相关的数据。在构造方法内部,通过调用父类的构造方法来初始化事件的来源,然后将传入的liveActivityAddModel
赋值给类的属性liveActivityAddModel
/**
* @author zhc
* 添加事件
*/
public class LiveEvent extends ApplicationEvent {
private LiveActivityAddModel liveActivityAddModel;
public LiveEvent(Object source,LiveActivityAddModel liveActivityAddModel) {
super(source);
this.liveActivityAddModel = liveActivityAddModel;
}
public LiveActivityAddModel getLiveActivityAddModel() {
return liveActivityAddModel;
}
public void setLiveActivityAddModel(LiveActivityAddModel liveActivityAddModel) {
this.liveActivityAddModel = liveActivityAddModel;
}
}
3、创建推送类(EventPublisher
类的作用是将LiveEvent
自定义事件发布到应用程序上下文中,以便其他组件或模块对该事件进行监听和处理。)
/**
* @author zhc
*/
@Component
public class EventPublisher {
@Autowired
private ApplicationContext applicationContext;
public void addLiveActivityEvent(LiveActivityAddModel liveActivityAddModel) {
LiveEvent channelEvent = new LiveEvent(this, liveActivityAddModel);
applicationContext.publishEvent(channelEvent);
}
}
4、创建监听器(LiveListener
类是一个监听LiveEvent
事件的监听器。当收到该事件时,会将事件中传递的数据进行相应操作)
@Slf4j
@Component
public class LiveListener implements ApplicationListener<LiveEvent> {
@Autowired
private LiveListService liveListService;
@Override
public void onApplicationEvent(LiveEvent liveEvent) {
try {
LiveActivityAddModel addModel = liveEvent.getLiveActivityAddModel();
if (Objects.nonNull(addModel)){
List<String> list = addModel.getLiveListAdd();
List<LiveList> lists = new ArrayList<>();
int i = 1;
for (String s : list) {
LiveList liveList = new LiveList();
liveList.setClassifyId(addModel.getClassifyId());
liveList.setBusinessId(s);
liveList.setCkey(addModel.getCkey());
liveList.setType(addModel.getType());
liveList.setBusinessType(addModel.getBusinessType());
liveList.setShowSort(i++);
lists.add(liveList);
}
liveListService.saveBatch(lists);
}
} catch (Exception e) {
log.error(e.getMessage());
throw new ServiceException("数据保存失败!");
}
}
}
5、创建事件并且发布(通过调用eventPublisher.addLiveActivityEvent(model)
方法,将创建的LiveActivityAddModel
对象传递给EventPublisher
组件的addLiveActivityEvent()
方法,从而触发一个自定义事件。在自定义事件的处理过程中,之前介绍的LiveListener
监听器会接收到该事件并执行相应的处理逻辑)
public void dateWithAdd(String ckey, String classifyId, List<String> ids, Integer type, Integer businessType) {
// 数据处理
LiveActivityAddModel model = new LiveActivityAddModel();
model.setCkey(ckey);
model.setClassifyId(Integer.valueOf(classifyId));
model.setLiveListAdd(ids);
model.setType(type);
model.setBusinessType(businessType);
eventPublisher.addLiveActivityEvent(model);
}