gpt4 book ai didi

Spring ApplicationListener在webapp上被触发了两次

转载 作者:行者123 更新时间:2023-12-03 12:24:31 24 4
gpt4 key购买 nike

我有一个应用程序监听器,由于它会加载基本的用户信息数据,因此应该在每次webapp启动时仅执行一次。

public class DefaultUsersDataLoader implements ApplicationListener<ContextRefreshedEvent> {
@Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent e) {...}
}

不知何故,它执行了两次:在应用程序启动时以及第一个请求到达服务器时。为什么会发生这种情况,我该如何预防呢?

最佳答案

通常,在Spring MVC应用程序中,您同时具有ContextLoaderListenerDispatcherServlet。这两个组件都创建了自己的ApplicationContext,这又触发了ContextRefreshedEvent
DispatcherServlet使用由ApplicationContext创建的ContextLoaderListener作为其父项。从子上下文触发的事件将传播到父上下文。

现在,如果您在根上下文中定义了ApplicationListener<ContextRefreshedEvent>(由ContextLoaderListener加载的那个),它将收到两次事件。

关于Spring ApplicationListener在webapp上被触发了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27859182/

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