springboot事件通知

在项目中如果按照多个模块开发的话就会涉及到数据之间的关联

比如设备基础模块的数据会提供给其他模块(门禁,考勤等)使用;如果公共模块的数据发生改变就要通知其他模块知道,比如,删除,修改等

这个时候就需要业务解耦;实现的方式有很多种,springboot有自带的事件通知;

当事件发生改变的时候,就会接收到消息:

继承事件:

@Getter
public class DeviceEvent extends ApplicationEvent {

    private Integer id;

    private String tableName;

    /**
     * Create a new ApplicationEvent.
     *
     * @param source the object on which the event initially occurred (never {@code null})
     */
    public DeviceEvent(Object source, Integer id, String tableName) {
        super(source);
        this.id = id;
        this.tableName = tableName;
    }

}

注册事件监听器,处理事件发生:

@Configuration
public class DeviceListener {

    @Autowired
    private DoorDeviceInfoMapper doorDeviceInfoMapper;

    @EventListener
    @Async //异步处理防止影响主流程
    public void onApplicationEvent(DeviceEvent event) {
        LambdaQueryWrapper<DoorDeviceInfo> queryWrapper = new QueryWrapper<DoorDeviceInfo>().lambda();
        queryWrapper.eq(DoorDeviceInfo::getDeviceId, event.getId())
                .eq(DoorDeviceInfo::getTableName, event.getTableName());
        doorDeviceInfoMapper.delete(queryWrapper);
    }
}

在业务处将事件发送出去

    @Autowired
    private ApplicationContext applicationContext;


    //事件发生的方法
     DeviceEvent deviceEvent = new DeviceEvent(this, id, tableName);
     applicationContext.publishEvent(deviceEvent);

 

上一篇:如何判断字符型注入和数字型注入


下一篇:sqlalchemy 多个数据库地址配置