This commit is contained in:
2024-08-30 21:19:44 +08:00
parent ace38f0baa
commit 0be221d4f8
3 changed files with 2893 additions and 0 deletions

113
java/springboot-事件.md Normal file
View File

@ -0,0 +1,113 @@
## springboot事件
#### 事务本身
实现 ApplicationEvent 类
```java
@Getter
public static class SchSyncToUpcomingEndEvent extends ApplicationEvent {
public SchSyncToUpcomingEndEvent(Object source) {
super(source);
}
}
```
#### 事务发布
```java
applicationEventPublisher.publishEvent()
applicationEventMulticaster.multicastEvent()
```
#### 注解接收事件
默认同步处理 需要异步处理 添加@Async 注解
```
/**
* 监听 SCH 同步至航班计划完成事件。
* 开始 航班计划同步至算法
*
* @param event
*/
@Async
@EventListener(FlightPlanEvent.SchSyncToUpcomingEndEvent.class)
public void syncCurrentStatusToAlgListener(FlightPlanEvent.SchSyncToUpcomingEndEvent event) {
XxlJobHelper.log("同步当前航班状态至算法 开始");
XxlJobHelper.log("同步当前航班状态至算法 结束");
}
```
#### 编程式接收事务
监听器
```java
@Component
@Slf4j
public class EventListener implements ApplicationListener<CustomEvent>{
@Override
public void onApplicationEvent(CustomEvent event) {
//这里也可以监听所有事件 使用 ApplicationEvent 类即可
//这里仅仅监听自定义事件 CustomEvent
log.info("ApplicationListener方式监听事件{}", event);
}
}
```
注册监听器
```java
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication app =new SpringApplication(Application.class);
app.addListeners(new MyApplicationStartingEventListener());//加入自定义的监听类
app.run(args);
}
}
```
#### 事务事件
需要等 事务发布者的事务完成提交 才能接收到事件
事务事件 只能接收一次
```
@Async
@TransactionalEventListener(value = FlightPlanEvent.SchSyncToUpcomingEndEvent.class, phase = TransactionPhase.AFTER_COMMIT)
public void syncBaseDataUpdateListener(FlightPlanEvent.SchSyncToUpcomingEndEvent event) {
syncBaseData();
syncSchRouteToRedis();
}
```