我有一个应用程序监听器,它应该每个webapp启动只执行一次,因为它加载基本的用户信息数据.
public class DefaultUsersDataLoader implements ApplicationListener<ContextRefreshedEvent> {
@Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent e) {...}
}
Run Code Online (Sandbox Code Playgroud)
不知何故,它会被执行两次:在应用程序启动时以及第一个请求到达服务器时.为什么会发生这种情况,我该如何预防呢?
M. *_*num 11
通常在Spring MVC应用程序中,您同时拥有ContextLoaderListener和DispatcherServlet.两个组件都创建了自己的组件ApplicationContext,而这两个组件都会触发ContextRefreshedEvent.
的DispatcherServlet用途ApplicationContext,通过创建ContextLoaderListener作为其父.从子上下文触发的事件将传播到父上下文.
现在,如果您ApplicationListener<ContextRefreshedEvent>在根上下文(由其加载的那个ContextLoaderListener)中定义了它,它将接收两次事件.
| 归档时间: |
|
| 查看次数: |
3743 次 |
| 最近记录: |