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

本文共 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

你可能感兴趣的文章
java------HashMap与HashSet的区别
查看>>
GaugeControl 之 DigitalGauge
查看>>
Mysql之sql语句操作
查看>>
C#中按模板操作Word —— 如何向Word中插入图片
查看>>
Linux设备驱动--块设备(三)之程序设计
查看>>
【前端】:jQuery下
查看>>
安卓解析 json 4种格式 全解析
查看>>
asd
查看>>
北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?
查看>>
java中的类、成员变量、方法的修饰符。
查看>>
.NET Core配置文件加载与DI注入配置数据
查看>>
JAVA_StandardServer await create[8005]怎么办
查看>>
servlet与CGI的区别
查看>>
【Spring】3、BeanFactory 和 ApplicationContext的区别
查看>>
Sharpdevelop如何在项目中添加类文件
查看>>
百科知识 手机QQ的视频如何保存
查看>>
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
查看>>
hive学习-测试数据
查看>>
[历朝通俗演义-蔡东藩-前汉]第011回 降真龙光韬泗水 斩大蛇夜走丰乡
查看>>
Maven多模块项目搭建
查看>>