1. 程式人生 > >Springboot2(13)輕鬆搞定自定義事件監聽

Springboot2(13)輕鬆搞定自定義事件監聽

原始碼地址

實現監聽方式三步驟:

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實現非同步監聽