ApplicationListener接口中的onApplicationEvent被调用两次解决方案

Spring容器初始化完成后,调用BeanPostProcessor这个类,这个类实现ApplicationListener接口,重写onApplicationEvent方法,

方法中就是我们自己要在容器初始化完成后加载的数据或者缓存。

下面是XML配置:

下面是自己写的BeanPostProcessor类:

下面是启动Tomcat后,重复加载了数据,调用了两次onApplicationEvent方法:

蓝色部分中的:

Root WebApplicationContext和WebApplicationContext(spring-servlet)两个容器。

下面是初始化全国地区信息的时候加载了两次:

Returning JDBC Connection to DataSource前面已经加载了一次地区信息,然后又Fetching JDBC Connection from DataSource又加载了一次。

问了度娘:虽然有方法,但试过以后还是没有解决这个问题。

方法一:

在onApplicationEvent()方法中添加判断,

==null,然后判断里面执行你要初始化的或者是缓存的代码。

方法二:

字符串值比较equals("Root WebApplicationContext")。

方法三:

在事件参数前面加上final,  final ContextRefreshedEvent event。

最终暂时还是没有解决问题,也许可以解决大家的这个问题,先写下来。

时间: 2024-11-07 20:52:33

ApplicationListener接口中的onApplicationEvent被调用两次解决方案的相关文章

ApplicationListener接口中的onApplicationEvent被调用两次解决方式

Spring容器初始化完毕后,调用BeanPostProcessor这个类,这个类实现ApplicationListener接口,重写onApplicationEvent方法, 方法中就是我们自己要在容器初始化完毕后载入的数据或者缓存. 以下是XML配置: 以下是自己写的BeanPostProcessor类: 以下是启动Tomcat后.反复载入了数据,调用了两次onApplicationEvent方法: 蓝色部分中的: Root WebApplicationContext和WebApplicat

Spring Task每次都会调用两次的问题

最近一个Spring Mvc的项目中需要定时执行一个任务,所以使用了spring 自带的Task功能.本地调试的时候一切都正常,可是部署到服务器上后,每次任务都会被调用两次.在网上搜索了相关的问题,排除了注解重复的问题后,发现是Tomcat配置项目时,把项目放在了webapp目录,且在server.xml配置文件中配置了docbase="项目路径"使容器被初始化两次造成的,最后把项目移出webapp目录,在docBase中指定路径的方式解决此问题.

spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法

在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appBase="" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="webapps/demo" reloadable=&quo

iOS长按手势调用两次解决方法

由于以前没有很细致的研究过长按手势,所以今天使用的时候发现长按手势会调用两次响应事件. 主要原因是长按手势会分别在UIGestureRecognizerStateBegan和UIGestureRecognizerStateEnded状态时调用响应函数 这时就需要在响应事件中增加手势状态的判断,根据具体的应用情况在相应的状态中执行操作. typedefNS_ENUM(NSInteger, UIGestureRecognizerState) { UIGestureRecognizerStatePos

Delphi按名字调用方法高级解决方案

Delphi按名字调用方法高级解决方案 博客分类: 编程基础 DelphiJ#ASPDOS数据结构 按名字调用方法似乎一直以来都是大家比较关注的技术,在论坛上有一个经典的答复: type    TProcedure = procedure(Test: string) of object; procedure ExecuteRoutine(Obj: TObject; Name, Param: string);  var    PMethod: TMethod;    AProcedure: TPr

ListView+CheckBox两种解决方案及原因分析

最近在用ListView+CheckBox搞一个item选中的项目,我将CheckBox的focus设置为false,另我大喜的是,CheckBox竟然可以选中(窃喜中),这么简单就搞定了,因为数据量较小,也没有发现什么问题. 后来数据多了, 页面需要滑动了, 发现了一个奇怪的问题,前面明明选中了,而再次滑动回去的时候竟然变成未选中状态! 这是我刚开始写的那段错误的代码: @Override public View getView(int position, View convertView,

ios7 自定义UINavigationBar UIBarButtonItem 10px的偏移纠正的两种解决方案

demo下载地址:http://pan.baidu.com/s/1c0eROkS 方案一:利用UINavigationBar 自带的布局item(Fixed space Bar Button Item)来适配ios7. 其实就是在原来返回按钮的位置上在多加一个占位的Item 为UINavigationBar 写一个分类.UINavigationItem+correct_offset.h #import <UIKit/UIKit.h> @interface UINavigationItem (c

ajaxFileUpload异步上传资源,onchange多次调用问题的解决方案

一.上传文件的做法 1 前端代码 <input id="myfiles" name="myfiles" type="file" onchange="upload();"/> <input type="button" name="btn_abc" onclick="document.getElementById('myfiles').click();"

USB设备(移动硬盘、鼠标)掉电掉驱动的两种解决方案

症状: 当你发现"移动硬盘图标"经常无故消失,又自己出现时. 你可以把这个现象称之为"掉电" or "掉驱动". 遇到这种情况,相当不爽. 比如"拷贝大文件"快完成的时候,掉之,那就真的是"我去...". 这种现象在笔记本上尤为常见,台式机相对比较少. 怎么解决呢? 解决方案: 1.取消勾选"允许计算机关闭此设备以节约电源(A)". 从"我的电脑" or "