普通使用
创建自定义事件
继承ApplicationEvent
import org.springframework.context.ApplicationEvent;
import java.time.Clock;
public class MyEvent extends ApplicationEvent {
private String message;
public MyEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() {
return this.message;
}
public MyEvent(Object source, Clock clock) {
super(source, clock);
}
}
创建发布事件
@Autowired ApplicationEventPublisher applicationEventPublisher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@Component
public class MyEventPublisher {
@Autowired
ApplicationEventPublisher applicationEventPublisher;
public void pushEvent(MyEvent myEvent) {
applicationEventPublisher.publishEvent(myEvent);
}
}
创建事件监听器
发布事件
增强Spring事件组件
异步监听事件
在配置类中启用异步支持
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* 在配置类中启用异步支持
*/
@Configuration
@EnableAsync
public class AsyncConfig {
}
异步监听事件
事件过滤监听事件
发布事件
总结
springboot event一般用于异步处理场景,起到解耦作用,类似与mq。
流程大概是这样:
1、事件产生方定义事件。
2、事件产生方在业务完成之后发布事件。
3、事件使用方监听事件,并做相应的业务处理。
参考: