Springboot2(13)輕鬆搞定自定義事件監聽
阿新 • • 發佈:2018-12-26
實現監聽方式三步驟:
1.自定義事件一般繼承ApplicationEvent
2.定義事件監聽實現ApplicationContextListener
3.釋出事件
文章目錄
定義一個自定義事件,繼承ApplicationEvent類
@Data
@AllArgsConstructor
public class LogPojo {
private String logName;
}
@Getter
public class LogSaveEvent extends ApplicationEvent{
public LogPojo logPojo;
public LogSaveEvent(Object source,LogPojo logPojo) {
super(source);
this.logPojo = logPojo;
// TODO Auto-generated constructor stub
}
public LogSaveEvent (Object source) {
super(source) ;
}
}
事件監聽實現
@Component
@Slf4j
public class LogEventListener {
@EventListener
@Async
public void saveLog(LogSaveEvent event) throws InterruptedException{
log.info("LogEventListener:"+event.getLogPojo().getLogName());
}
}
或者
@Slf4j
@Component
public class LogEvent2Listener implements ApplicationListener<LogSaveEvent> {
@Async
@Override
public void onApplicationEvent(LogSaveEvent logSaveEvent) {
log.info("LogEvent2Listener:"+logSaveEvent.getLogPojo().getLogName());
}
}
釋出事件
@RestController
public class EventController {
@Autowired
private ApplicationContext publisher;
@RequestMapping("/publisher")
public String publisher(){
LogSaveEvent event = new LogSaveEvent(this,new LogPojo("tom"));
publisher.publishEvent(event);
return "success";
}
}
結果
2018-12-21 12:14:18.485 INFO 8376 --- [ default-2] : LogEvent2Listener:tom
2018-12-21 12:14:18.488 INFO 8376 --- [ default-1] : LogEventListener:tom
@Async
實現非同步監聽