java注解类定时器
package com.jianwu.task; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.jianwu.dao.SmsHttpInfoDao;
import com.jianwu.domain.SmsHttpInfo;
import com.jianwu.domain.SmsPre;
import com.jianwu.domain.SubmitReq;
import com.jianwu.manager.SmsMtManager;
import com.jianwu.manager.SmsPreManager;
import com.jianwu.service.result.SmsResult;
import com.jianwu.sms.dto.SendStatus;
import com.jianwu.util.Md5Utils;
import com.nodewind.member.sso.common.HttpUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by tookbra on 2016/7/27.
*/
@Component
@EnableScheduling
public class SmsTask {
@Autowired
private SmsPreManager smsPreManager;
@Autowired
private SmsMtManager smsMtManager;
@Autowired
private SmsHttpInfoDao smsHttpInfoDao;
private static final ExecutorService bizThreadPool = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("smsBiz-%s").build()); private static final Logger logger = LoggerFactory.getLogger(SmsTask.class); // @PostConstruct
// public void sendSms() {
// bizThreadPool.submit(new Runnable() {
// @Override
// public void run() {
// while (true) {
// try {
// SmsPre smsPre = Constant.smsQueue.take();
// sendSms(smsPre);
// } catch (Exception e) {
// logger.error("发送号码异常:", e);
// e.printStackTrace();
// }
// }
// }
// });
// } //@Scheduled(cron = "0 0/1 * * * ?")
@Scheduled(fixedDelay = 1000*60*1)
void doTimeTask() {
logger.debug("定时短信扫描");
List<SmsPre> smsPreList = smsPreManager.findDestineSms();
if (!CollectionUtils.isEmpty(smsPreList)) {
logger.debug("当前定时短信"+smsPreList.size()+"条");
for (SmsPre smsPre : smsPreList) {
sendSms(smsPre);
}
} else {
logger.debug("当前没有定时短信");
}
} public SmsResult sendSms(SmsPre smsPre) {
SmsResult smsResult = new SmsResult();
List<String> phones = smsMtManager.getPhonesByPreId(smsPre.getPreId());
if (phones.isEmpty()) {
smsResult.setSuccess(false);
smsResult.setMsgGroup("");
smsResult.setRspcod("");
return smsResult;
}
logger.info("---smsPre.getCompanyId()---:" + smsPre.getCompanyId());
SmsHttpInfo smsHttpInfo = smsHttpInfoDao.findByCompanyId(smsPre.getCompanyId());
if (smsHttpInfo == null) {
return null;
}
logger.info("---smsHttpInfo---:" + smsHttpInfo.toString());
//发送下行短信请求
HttpUtils client = HttpUtils.getInstance();
SubmitReq submitReq = new SubmitReq();
submitReq.setEcName(smsHttpInfo.getEcName());
submitReq.setApId(smsHttpInfo.getApId());
submitReq.setSecretKey(smsHttpInfo.getSecretKey());
if (!Strings.isNullOrEmpty(smsPre.getSign())) {
submitReq.setContent(smsPre.getSmsContent().concat(smsPre.getSign()));
} else {
submitReq.setContent(smsPre.getSmsContent());
}
submitReq.setMobiles(StringUtils.join(phones, ","));
logger.info("---submitReq.getMobiles()---" + submitReq.getMobiles());
submitReq.setAddSerial(smsHttpInfo.getAddSerial());
submitReq.setSign(smsHttpInfo.getSign());
//以下stringBuffer顺序不能打乱
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(submitReq.getEcName());
stringBuffer.append(submitReq.getApId());
stringBuffer.append(submitReq.getSecretKey());
stringBuffer.append(submitReq.getMobiles());
stringBuffer.append(submitReq.getContent());
stringBuffer.append(submitReq.getSign());
stringBuffer.append(submitReq.getAddSerial());
submitReq.setMac(Md5Utils.digest(stringBuffer.toString()));
String reqText = JSON.toJSONString(submitReq);
logger.info("---reqText---:" + reqText);
//加密
String encode = Base64.encodeBase64String(reqText.getBytes());
logger.info("---encode---:" + encode);
String msg = client.sendHttpPost(smsHttpInfo.getSmsUrl(), encode, "application/json");
logger.info("---msg---:" + msg);
JSONObject json = JSON.parseObject(msg);
if (json.containsKey("rspcod")) {
smsResult.setRspcod(json.getString("rspcod"));
}
if (json.containsKey("msgGroup")) {
smsResult.setMsgGroup(json.getString("msgGroup"));
}
if (json.containsKey("success")) {
smsResult.setSuccess(json.getBoolean("success"));
}
logger.info(smsResult.getRspcod() + "," + smsResult.getMsgGroup() + "," + smsResult.isSuccess());
smsPre.setProcessResult(SendStatus.SENT.getValue());
smsPreManager.update(smsPre);
return smsResult;
}
} 、、、、、、、、、、、、、、、、、、、、、、、、、
package com.jianwu.sms.task; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.jianwu.sms.codec.cmpp.msg.sp.CmppSubmitRequestMessage;
import com.jianwu.sms.common.Constant;
import com.jianwu.sms.handler.SubmitMsgHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger; /**
* Created by tookbra on 2016/7/27.
*/
@Component
public class SmsTask extends Task {
private static final ExecutorService bizThreadPool = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("smsBiz-%s").build()); private static final Logger logger = LoggerFactory.getLogger(SmsTask.class); static SpeedControl control = new SpeedControl(); @PostConstruct
public void sendSms() {
bizThreadPool.submit(new Runnable() {
@Override
public void run() {
while (true) {
try {
List<CmppSubmitRequestMessage> sendList = Constant.smsQueue.take();
for (CmppSubmitRequestMessage cmppSubmitRequestMessage : sendList) {
logger.info("发送号码:{}", cmppSubmitRequestMessage.getDestterminalId()[0]);
submitMsgHandler.sendSms(cmppSubmitRequestMessage);
control.control(cmppSubmitRequestMessage.getMsgContent());
}
control.clear();
} catch (Exception e) {
logger.error("发送号码异常:", e);
e.printStackTrace();
}
}
}
});
}
}
java注解类定时器的更多相关文章
- Java 工具类 —— 定时器(Timer/TimerTask)
import java.util.Timer; import java.util.TimerTask; public class Timer { .... public void schedule(T ...
- 认识下java注解的实现原理
1,什么是注解 注解也叫元数据,例如常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注 ...
- java自定义注解类
一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...
- Java 注释类之常用元注解
Java 注释类之常用元注解 自定义Java注释类时,我们使用方式如下: @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD ...
- Java中自定义注解类,并加以运用
在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解. 注解是一种能被添加到java代码中的元数据,类.方法.变量.参数和包都可以用注解来修饰.注解对于它所修饰的代码并没有直接的影 ...
- Java注解
Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- Java注解入门
注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...
- java注解(Annotation)解析
注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...
随机推荐
- 聚合类新闻client的改进
zaker和鲜果是最早的聚合类新闻产品.前几年发展非常快.迅速占据了市场,但近两年发展变得缓慢.而今日头条自公布以来才两年.用户量就迅速超过了zaker和鲜果.使用起来非常easy,左右滑动 ...
- void *指针的加减运算
1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...
- Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java 1. 断点的实现:手动断点 die和exit是等价的 1 2. 变量表的实现 1 3. print_r( ...
- DDR 复位
将FPGA代码和实际的数字电路对应起来. always @ (negedge clk_ref_200) begin if(ddr3_init_done) 'b10) 'b10 ...
- UVA812-Trade on Verweggistan(暴力)
题目链接 题意:商人要去买pruls这样的东西.然后它的价值是一个序列,买的时候要严格从头到尾取,比方你要买第5个,那么前4个也要一起买下来,求商人能获得的最大的利润. 思路:最大利润肯定就是每一个序 ...
- python学习之strip()
定义: Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 语法: str.strip([chars]); 返回值: 返回移除字符串头尾指定的字符生成的新字符串. 例子: ...
- ThinkPHP分页实例
ThinkPHP分页实例 (2014-09-20 15:34:36) 很多人初学thinkphp时,不太熟悉thinkphp的分页使用方法,现在将自己整理的分页方法分享下,有需要的朋友可以看看. ...
- deepin linux 15.3安装完eclipse启动报错An error has occurred.
原因是系统中安装了jdk9 导致的. 卸载jdk9就可以了 $ java -version Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings ...
- Node.js 配置Nginx
1.修改nginx.conf upstream nodejs { server 127.0.0.1:3000; #server 127.0.0.1:3001; keepalive 64; } serv ...
- Zookeeper的结构和命令
1. Zookeeper的特性 1.Zookeeper:一个leader,多个follower组成的集群. 2.全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个serv ...