事件生產和監聽
阿新 • • 發佈:2021-11-10
事件的生產者
import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @Component @Slf4j public class Sender { @Autowired private ApplicationContext applicationContext; /** * 釋出事件 * @param eventBoat 事件資料 * @Return 呼叫結果 */ public boolean sendEvent(EventBoat eventBoat) { boolean flag = false; try { applicationContext.publishEvent(eventBoat); flag = true; log.info("傳送事件成功"); } catch (Exception e) { log.error("傳送事件失敗,eventBoat={}", JSON.toJSONString(eventBoat)); } return flag; } }
事件的監聽者
@Component @Slf4j public class Listener { /** * 處理事件 * @param eventBoat * @Return */ @EventListener @Async public void handleEvent(EventBoat eventBoat){ try { String batchNo = eventBoat.getBatchNo(); log.info("事件接收成功:{}", batchNo); //業務處理 ........... } catch (Exception e) { log.error("處理執行錯誤>>> {}", e); } } }
實體類
@Data
public class EventBoat extends ApplicationEvent {
/**
* 批次號
*/
private String batchNo;
public EventBoat(Object source, String batchNo) {
super(source);
this.batchNo = batchNo;
}
}