Spring ApplicationListener在webapp上被触发了两次
我有一个应用程序侦听器,由于它会加载基本的用户信息数据,因此应该在每次webapp启动时仅执行一次。
public class DefaultUsersDataLoader implements ApplicationListener<ContextRefreshedEvent> { @Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent e) {...}
}
不知何故,它执行了两次:在应用程序启动时以及第一个请求到达服务器时。为什么会发生这种情况,我该如何预防呢?
回答:
通常,在Spring
MVC应用程序中,您同时具有ContextLoaderListener
和DispatcherServlet
。这两个组件都创建了自己的组件,这两个组件ApplicationContext
又触发了ContextRefreshedEvent
。
的DispatcherServlet
用途ApplicationContext
,通过创建ContextLoaderListener
作为其父。从子上下文触发的事件将传播到父上下文。
现在,如果您ApplicationListener<ContextRefreshedEvent>
在根上下文中有一个定义(由加载的定义ContextLoaderListener
),它将收到两次事件。
以上是 Spring ApplicationListener在webapp上被触发了两次 的全部内容, 来源链接: utcz.com/qa/423815.html