Spring ApplicationListener在webapp上被触发了两次

我有一个应用程序侦听器,由于它会加载基本的用户信息数据,因此应该在每次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上被触发了两次 的全部内容, 来源链接: utcz.com/qa/423815.html

回到顶部