美文网首页
spring事件

spring事件

作者: ivms8200 | 来源:发表于2020-05-29 11:58 被阅读0次

定义事件实体

这里可以自己增加字段存储事件的数据

@Data
@Builder
public class EventMessage {
    /**
     * 事件代码
     */
    private String code;
    /**
     * 事件资源
     */
    private String message;

    /**
     * byte资源
     */
    private byte[] bytes;
}

定义事件

  1. 继承ApplicationEvent类。
  2. 在构造器中传入参数,可以是任何类型。
public class CustomEvent extends ApplicationEvent {
    public CustomEvent(EventMessage source) {
        super(source);
    }
}

发布事件

  • 这里可以设置String,主要是看数据类型来设置。
@Service
public class XXXService {
   @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void doJob(String name) {
       applicationEventPublisher.publishEvent(
                    new CustomEvent(EventMessage.builder().code("event_type_1").bytes(bytes).build()));
    }
}

监听事件

不同的事件让不同的handler去执行

@Component
public class EventListener {
    @Autowired
    XXXHandler xxxHandler;

    /**
     * 处理事件
     *
     * @param event
     */
    @org.springframework.context.event.EventListener
    public void listenUserRegisterEvent(CustomEvent event) {
        EventMessage eventMessage = (EventMessage) event.getSource();
        if (eventMessage != null) {
            logger.debug("收到监听事件,code = {} ,message= {}", eventMessage.getCode(), eventMessage.getMessage());
            switch (eventMessage.getCode()) {
                case "event_type_1":
                    xxxHandler.doJob(eventMessage.getBytes());
                    break;
            }
        }
    }
}

执行任务

@Component
public class XXXHandler {
    /**
     * 服务对象
     */
    @Resource
    private XXXService xxxService;

    /**
     * 处理监听数据
     *
     * @param bytes
     */
    public void doJob(byte[] bytes) {
        logger.debug("在这里处理监听数据---开始");
        //在这里处理数据
        //省去转换的逻辑,这里直接把bytes假想成实体吧。
        doSave(bytes);
        logger.debug("在这里处理监听数据---结束");
    }

    /**
     * 保存入库
     */
    public void doSave(byte[] bytes) {
        xxxService.save(bytes);
    }
}

相关文章

网友评论

      本文标题:spring事件

      本文链接:https://www.haomeiwen.com/subject/isjxzhtx.html