需求
当下了一个订单后,通知用户下单成功
创建 Spring Boot 项目,依赖如下,其余省略
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
复制代码
创建事件 ApplicationEvent
@Getter
public class PushOrderEvent extends ApplicationEvent {
private String orderNo;
private Long userId;
public PushOrderEvent(Object source, String orderNo,Long userId) {
super(source);
this.orderNo = orderNo;
this.userId = userId;
}
}
复制代码
创建监听器 ApplicationListener
实现接口方式
@Slf4j
@Component
public class PushOrderListener implements ApplicationListener<PushOrderEvent> {
@Override
public void onApplicationEvent(PushOrderEvent event) {
log.info("{}用户下了一个订单{}", event.getUserId(), event.getOrderNo());
}
}
复制代码
注解方式
@Slf4j
@Component
public class AnnotationPushOrderListener {
@EventListener
public void handler(PushOrderEvent event) {
log.info("{}用户下了一个订单{}", event.getUserId(), event.getOrderNo());
}
}
复制代码
发布事件
@Slf4j
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private ApplicationEventPublisher publisher;
@PostMapping("push")
public ResponseEntity pushOrder() {
String orderNo = UUID.randomUUID().toString();
// 发布事件
publisher.publishEvent(new PushOrderEvent(this, orderNo, 666666L));
return ResponseEntity.ok(orderNo);
}
}
复制代码
测试
请求接口
http://127.0.0.1:8080/order/push
复制代码
结果,控制台输出
666666用户下了一个订单211f238e-7517-4786-83ca-057c64545c65
复制代码