114 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
## 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();
 | 
						||
    }
 | 
						||
   
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 |