SpringBoot的事件监听

系统定义的事件

待补充

自定义的事件
事件消息实体

事件中的消息实体类型。

1
2
3
4
5
6
7
8
9
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DemoEventMessage implements Serializable {
private static final long serialVersionUID = -8599896146999392055L;
private String code;
private String title;
private String body;
}
事件源

自定义的事件源需要继承自ApplicationEvent类,不严格要求事件源集成ApplicationEvent,但是还是希望集成。

1
2
3
4
5
6
7
8
9
10
11
12
@Getter
public class DemoEvent extends ApplicationEvent {
private DemoEventMessage message;
public DemoEvent(Object source) {
super(source);
}

public DemoEvent(Object source, DemoEventMessage message) {
super(source);
this.message = message;
}
}
事件监听器

先定义了一个基础的事件监听接口,其中onEvent(T event)需要实现类自定义实现。

1
2
3
4
5
6
7
8
9
public interface MyEventListener<T extends ApplicationEvent> {

/**
* 事件监听实现.
*
* @param event
*/
void onEvent(T event);
}

实现类要实现接口中的方法onEvent(T event)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
@Slf4j
public class DemoEventListener implements MyEventListener<DemoEvent> {

@Override
@EventListener
public void onEvent(DemoEvent event) {
log.info("======== 开始接收消息 ========");
log.info("消息source: {}", event.getSource().getClass().getName());
log.info("消息code: {}", event.getMessage().getCode());
log.info("消息title: {}", event.getMessage().getTitle());
log.info("消息body: {}", event.getMessage().getBody());
log.info("");
// TODO: 2019-05-10 具体的业务逻辑
}
}
事件推送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Slf4j
public class DemoEventPublishTest extends BaseTest {
@Autowired
private ApplicationEventPublisher eventPublisher;

@Test
public void testSimplePublish() {
String title = "线程[1]的消息";
String body = CalculateUtil.format(new Date()) + " 消息";
DemoEventMessage message = new DemoEventMessage("00000", title, body);
log.info("线程[1]开始发布事件: {}", message);
eventPublisher.publishEvent(new DemoEvent(this, message));
}
}