sms+quartz多次重发短信
来源:互联网 发布:跟着李炎恢学php 编辑:程序博客网 时间:2024/06/05 10:02
定时短信总是重发,反反复复半个月试了很多种方案:
方案一
思路
检查逻辑,查看是否是因为一个用户报了同一学校不同分校的topic,获取到重复的userid,从而得到了相同的mobile,需要对手机号去重
操作
if(!strMobile.contains(userTopicInfoVoList.get(mobiles).getMobile())){mobile.append(userTopicInfoVoList.get(mobiles).getMobile()).append(",");}
结果
重发
方案二
思路
查看是否是因为quartz的间隔时间太短,导致一次遍历还没完成,还没有更新if_sms未已发送,下一次quartz又来了,又会查出来上次的内容
操作
增加quartz间隔
结果
重发
方法三
思路
quartz在某个时间点,比如说18:00:00执行,在这个点可能会执行多次quartz,直到时间变为18:00:01,停止执行
操作
加静态变量,让quartz只执行一次
Static int TIME=1;while(TIME==1){try{messageService.sendMessageToUser();LOG.info("定时任务发送短信|SmsTimer|executeInternal|params:No");}catch(Exceptione){LOG.error("定时任务发送短信|SmsTimer|executeInternal|params:error={}",e);}finally{TIME++;}
结果
重发
方法四
思路
并发问题,可能两个线程同时执行,A线程还有未time++操作,B线程进来发现time还是1,又进来一次,这个时候需要加锁
操作
privatefinalLocklock=newReentrantLock();//锁while(TIME==1){lock.lock();try{messageService.sendMessageToUser();LOG.info("定时任务发送短信|SmsTimer|executeInternal|params:No");}catch(Exceptione){LOG.error("定时任务发送短信|SmsTimer|executeInternal|params:error={}",e);}finally{TIME++;lock.unlock();}}
结果
重发
方法五
思路
tomcat执行了两次,告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,又让tomcat再加载了一遍(一般情况下配置,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两次。
操作
<Host/>里面的改成 autoDeploy="false" deployOnStartup="false" 这样就可以避免tomcat服务器中自启动导致quartz定时任务被触发两次。(当然还可以按需求修改,毕竟每个项目的需求都不尽相同。)
结果
不重发
1 0
- sms+quartz多次重发短信
- 短信SMS
- 短信重发机制
- 短信专题(SMS、MMS)
- SMS短信开发技术
- SMS API发送短信
- blackberry 发送SMS短信
- 发送短信 SMS
- 转SMS短信基本知识
- android 发送短信sms
- Android 之 sms 短信
- SMS短信发送
- SMS短信PDU编码
- Android 发送短信 sms
- Android SMS 短信操作
- Android 之 sms 短信
- SMS后台短信发送!
- android SMS 发送短信
- 树的使用应用
- HDU#1286:找新朋友
- Ubuntu 14.04 Web服务器--Apache的安装和配置
- Linux Mint (应用软件:USB镜像写入工具)
- 浅谈volatile关键字
- sms+quartz多次重发短信
- 图片旋转
- CUDA 内存操作与访问频率的问题
- 物联安防,构筑更加智能的平安城市
- maven遇到的一些问题
- Linux下MySQL服务突然无法正常启动
- Unity3D手游开发实践《腾讯桌球》客户端开发经验总结
- 第七周项目6 停车场模拟
- 基于Ubuntu 14.04的Android Build Server搭建