gpt4 book ai didi

java - UI/VaadinSession 超时

转载 作者:行者123 更新时间:2023-11-30 06:40:40 27 4
gpt4 key购买 nike

我将 Vaadin Flow 13 与 Spring Boot 结合使用。在我的“application.properties”中,我指定了以下值:

vaadin.servlet.heartbeatInterval=5
vaadin.servlet.productionMode=true
vaadin.servlet.closeIdleSessions=true

我没有 web.xml 或覆盖 Vaadin Servlet(如描述的 here )。

在我的应用程序中,我有一个 View 在 onAttach 方法中注册到 Hazelcast 事件总线。我使用 ui.access/push 将 Hazelcast 与 Vaadin 生命周期同步,看起来工作正常。在 onDetach 方法中,Hazelcast 的监听器被移除。当我现在导航到不同的 View 时,监听器被正确移除。

但是如果我在 View 打开时按下浏览器中的刷新按钮,则不会调用 onDetach 方法并创建一个新的 UI。我完全理解该工作流程并假设我需要处理 UI/UI-Session 超时以删除监听器。遗憾的是,我不知道在哪里可以附加一个监听器来触发我的 Hazelcast 监听器的注销。

我创建了以下 View 来调试生命周期:

@Route(layout = ConcreteAppLayout.class)
public class MainView extends VerticalLayout {

private static final AtomicLong counter = new AtomicLong(0);

protected MainView() {
setId("main-view-" + counter.incrementAndGet());
setAlignItems(Alignment.CENTER);
add(new Label("MainView"));

print("A new MainView(" + getId() + ") is created");
}

@Override
protected void onAttach(final AttachEvent attachEvent) {
final Optional<VaadinService> service = getUI()
.map(ui -> ui.getSession())
.map(s -> s.getService());

getUI().ifPresent(ui -> ui.addDetachListener(e -> print("UI of MainView(" + getId() + ") destroyed")));
service.ifPresent(s -> s.addSessionDestroyListener(e -> print("Session of MainView(" + getId() + ") destroyed")));

System.out.println("MainView(" + getId() + ") is attached");
}

@Override
protected void onDetach(final DetachEvent detachEvent) {
print("MainView(" + getId() + ") is detached");
}

private void print(final String s) {
System.out.println(s);
}
}

如果我打开 View 并按刷新,我或多或少会收到以下日志:

MainView(1) is created
MainView(1) is attached

REFRESH OF BROWSER

MainView(2) is created
MainView(2) is attached

如果我现在导航到我收到的不同 View

MainView(2) is detached

MainView(1) 或其 UI 永远不会关闭。我该如何处理这个问题?

最佳答案

我的问题是 application.properties 中的 vaadin.servlet.heartbeatInterval 属性。看起来正确的名称是 vaadin.heartbeatInterval。更改属性名称后,一切都按预期工作。

关于java - UI/VaadinSession 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586523/

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