gpt4 book ai didi

java - Spring boot 中的事件监听器

转载 作者:行者123 更新时间:2023-12-01 10:03:44 25 4
gpt4 key购买 nike

我有一个 TestController 范围 session 。它正在处理 MyEvent

@Controller
@Scope("session")
@RequestMapping(value = "/test")
@Slf4j
public class TestController {

private String phone = getPhone();

private String getPhone() {
String phone = RandomGenerator.generateNumeric(4);
log.info("Phone is: {}", phone);
return phone;
}

@EventListener
public void listen(MyEvent event) {
log.info("Event in {} ({})", this, RandomGenerator.generateNumeric());
}

}

但是当我发布该事件时,只有 TestController 类的一个实例得到了该事件。但我想在所有实例中处理一个事件。你能帮我吗?

最佳答案

您使用 @Scope("session") 声明 @Controller,因此您会为每个 session 获得一个新的 Controller bean。

然后,在代码的未公开部分中,您发布一个事件,因此只有与发布者位于同一 session 中的 Controller 才能接收该事件,这是合理的,因为其他 Controller 位于其他 session 上。

因此,由于每个 session 有一个 Controller ,因此该事件仅被消耗一次

解决方案是将范围从 session 更改为 singleton(默认),并且不在 Controller 中存储状态(该电话号码)。

关于java - Spring boot 中的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com