gpt4 book ai didi

java - Vaadin 为单个应用程序启动多个应用程序实例

转载 作者:行者123 更新时间:2023-11-28 23:05:45 24 4
gpt4 key购买 nike

我正在使用 JProfiler 查看在本地 tomcat 服务器上运行的 Vaadin 应用程序。这表明每次我启动服务器并运行我的应用程序时,我的主应用程序类都有 3 个实例。如果我关闭浏览器中的应用程序,甚至完全关闭浏览器,还剩下 2 个。我注意到应用程序的 init() 方法在启动期间被调用了 3 次,即使我自己从未明确调用它。我正在使用 Threadlocal 模式(但使用 InheritableThreadlocal)。

这对我来说看起来不正常,有什么可以导致这种行为的吗?

(从我在 vaadin 论坛上的帖子中复制了这个问题)

最佳答案

根据您的描述,我了解到 Application 是您编写的类(而不是 Vaadin 提供的东西)并且您以某种方式将此类的实例保存在 ThreadLocal.

这可以解释您所看到的行为:Tomcat 将启动多个线程来处理客户端请求。对于每个线程,一个新的 Application 实例将保存在 ThreadLocal 中。

尝试(邪恶)Singleton pattern或者(更好)使用单例范围的依赖注入(inject)。

如果您使用单例模式,请确保使用“在多线程应用程序中构造”下的代码,否则您将在 Tomcat 中遇到奇怪的错误。 JavaWorld 上的这篇文章对其进行了深入解释:Simply Singleton

编辑 根据您的反馈:您看到的行为符合预期且正确。 Tomcat 使用线程来处理请求,它会预生成一对以准备开展业务(在您的例子中,它生成三个)。

关于java - Vaadin 为单个应用程序启动多个应用程序实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9869946/

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