一个方法被三次调用,奇葩的问题!

meow_meow 2018-02-06 05:19:50
我在工程中设置了一个定时任务

定时任务是用spring自带的定时任务做的,工具 IDE 是 Eclipse

写一段大概意思的代码

//这是要执行的任务
QueryBanlenceTask(){
for(int i ; i<10 ; i++ ){
//调用方法
String requestXml = createRequestXml();

//执行其他操作
}
}

Private String createRequestXml(){
//在这里生成Xml文件
}

出现的问题:
在调用createRequestXml方法时,原本是每循环一次调用一次方法,
实际中每循环一次,这createRequestXml方法,被调用了三次(多次验证确定是三次)


我开始是怀疑eclipse出了问题,在模拟了这个问题后,其他地方执行正常,并没有循环一次调用三次现象

现在很迷茫,不知道是哪里出现问题了


...全文
545 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-02-07
  • 打赏
  • 举报
回复
引用 2 楼 meow_meow 的回复:
[quote=引用 1 楼 shzy1988 的回复:] 代码不全,不好找问题。应该不会是IDE的问题,比较eclipse久经沙场。还是比较靠谱的
找到问题了,获取当前线程 id ,发现有三个线程在同时运行这个任务 以前的人写的代码,在系统中有三处加载 static FileSystemXmlApplicationContext context; static{ context = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");. } 我的理解是,启动工程就相当于加载了三个context上下文,那我的定时任务 在三个context中各有一份,所以会出现三次调用的现象。我把代码中的context注释两个context后,运行正常了。 不知道理解的对不。我比较奇怪的是这系统居然能正常的运行了两年多,真是牛逼。 [/quote] 这个很正常,多个spring容器,但实际上是隔离的,代码运行时也只会用WebApplicationContext对应spring容器的bean,如果只用来做注入,基本没啥问题的,就是费点内存
meow_meow 2018-02-06
  • 打赏
  • 举报
回复
引用 1 楼 shzy1988 的回复:
代码不全,不好找问题。应该不会是IDE的问题,比较eclipse久经沙场。还是比较靠谱的
找到问题了,获取当前线程 id ,发现有三个线程在同时运行这个任务 以前的人写的代码,在系统中有三处加载 static FileSystemXmlApplicationContext context; static{ context = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");. } 我的理解是,启动工程就相当于加载了三个context上下文,那我的定时任务 在三个context中各有一份,所以会出现三次调用的现象。我把代码中的context注释两个context后,运行正常了。 不知道理解的对不。我比较奇怪的是这系统居然能正常的运行了两年多,真是牛逼。
双子叶 2018-02-06
  • 打赏
  • 举报
回复
代码不全,不好找问题。应该不会是IDE的问题,比较eclipse久经沙场。还是比较靠谱的

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧