博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 定时执行任务重复执行多次
阅读量:5789 次
发布时间:2019-06-18

本文共 1697 字,大约阅读时间需要 5 分钟。

  使用spring的定时任务组件的时候,代码如下。

@Scheduled(cron="0 5/5 * * * ?")	    public void sendWeatherSMS()	    {			String messageContent = messageFactory.getWeatherSMS();			//如果生成短信内容为空的话,则重试3次。			int retryTimes = 3;			while(retryTimes>=0&&isEmpty(messageContent)){				logger.error("生成天气信息短信失败。正在进行第"+(4-retryTimes) +"次重试");				try {					Thread.sleep(1000*(10- retryTimes));				} catch (InterruptedException e) {					// TODO Auto-generated catch block					logger.error(e);				}				messageContent=messageFactory.getWeatherSMS();				retryTimes--;			}							String phoneNumbers = getSendWeatherInfoPhoneNum().trim();			if(!isEmpty(messageContent)){				foSendSMS.execute(phoneNumbers, messageContent);			}else{				logger.error("生成天气信息短信失败。");			}				        System.out.println("sendWeatherSMS   "+phoneNumbers+"    "+ messageContent + new Date());	    }

  忽略掉方法中的,取得内容短信为空后最大重试3次的逻辑。在触发改cron的表达式的时候,发现sendWeatherSMS()方法执行了3次。网上也搜了一些答案, 一开始就是说配置文件文档,tomcat问题,感觉不科学。google一下,发现spring官方文档提供了如下的解释:

 

Make sure that you are not initializing multiple instances of the same @Scheduled annotation class at runtime, unless you do want to schedule callbacks to each such instance. Related to this, make sure that you do not use @Configurable on bean classes which are annotated with @Scheduled and registered as regular Spring beans with the container: You would get double initialization otherwise, once through the container and once through the @Configurable aspect, with the consequence of each @Scheduled method being invoked twice.

也就是说,造成这个问题的原因在于,自己配置不当或者程序的问题,导致bean被加载了多次。因此解决的办法就是,排除一些Task所在的bean被初始化的地方,避免bean被多次初始化。 我的解决方案是,把schedule的配置文件,单独放到一个xml,避免被多次引用。

转载于:https://www.cnblogs.com/dongqiSilent/p/5179727.html

你可能感兴趣的文章
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
JS prototype 属性
查看>>
HTTP库Axios
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
20个Linux服务器性能调优技巧
查看>>
填坑记:Uncaught RangeError: Maximum call stack size exceeded
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
KVO原理分析及使用进阶
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>