调度器:
/**
* 任务调度器类
* @author wwr
* 调度任务:定时发送信息类:SendMsgForPersonTimmer;调度时间:五分钟
*/
public class TaskScheduler {
private static org.slf4j.Logger _log = LoggerFactory.getLogger(MainScheduler.class);
//创建调度器
public static Scheduler getScheduler()throws SchedulerException{
SchedulerFactory schdulerFactory = new StdSchedulerFactory();
return schdulerFactory.getScheduler();
}
/**
* 任务调度
* @param jobClass 任务类
* @param job1 任务名
* @param job1Group 任务组别
* @param trigger1 触发器名字
* @param triggerGroup 触发器组别
* @throws SchedulerException
* @throws ParseException
*/
public static void schedulerJob(Object jobClass,String job1,String job1Group,String trigger1,String triggerGroup)throws SchedulerException, ParseException{
Class<? extends Job> job = (Class<? extends Job>) jobClass.getClass();
//创建任务
JobDetail jobDetail = JobBuilder.newJob(job).withIdentity(job1,job1Group).build();
//创建触发器,三秒延迟
Long time = System.currentTimeMillis()+3*1000L;//设置3秒后启动任务
Date startTime = new Date(time);
//Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group3").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInHours(10).repeatForever()).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(trigger1,triggerGroup).startAt(startTime).withSchedule(CronScheduleBuilder.cronSchedule("5/0 * * * * ?")).build();//设置五分钟执行一次任务
Scheduler scheduler = getScheduler();
//将任务及触发器放入调度器
scheduler.scheduleJob(jobDetail, trigger);
//调度器开始调度任务
scheduler.start();
}
创建要执行的定时任务:
/**
* 定时检测专家邮件状态是否正常
* 未发的话给专家发送邮件
* @author wwr
*
*/
public class SendMsgForPersonTimmer implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
//检查邮件状态
List<ExpertMailModel> mailList = ExpertMailModel.dao.getMail();
for(ExpertMailModel msg:mailList){
//判断邮件状态
if(Integer.parseInt(String.valueOf(msg.get("STATUS")))==0){
//发送邮件
String sjr=msg.getStr("RECEIVE_MAIL");
String fsnr=msg.getStr("CONTENT");
MailKit.send(sjr,Arrays.asList(sjr), "抽取专家提醒 ", fsnr);
//更新邮件记录表的邮件发送时间 和状态
msg.set("SEND_DATE", Timestamp.valueOf(DateUtil.getNow()));
msg.set("STATUS", 1);
msg.update();
}
//判断短信状态
if(Integer.parseInt(String.valueOf(msg.get("SHORTMSGSTATUS")))==0){
String telPhone = msg.get("TELPHONE");
String personName = msg.get("EXPERT_NAME");//专家姓名
String project = msg.get("PROJECTNAME");//项目名称
String group = msg.get("GROUPNAME");//项目组别名称
//设置短信内容
String msgContent = "【山西晋路软件有限公司】"+personName+":您已被"+project+"项目抽取作为"+group+"专家进行评审,请登录邮箱确认是否能按时参加!";
int feedBack = SendShortMsg.sendMsg(telPhone, personName, project, group);
if(feedBack==1){
msg.set("SHORTMSGCONTENT", msgContent);
msg.set("SHORTMSGSTATUS", 1);
msg.update();
}else{
System.out.println("短信发送失败!!!");
}
}
}
}
调度器装载定时任务job。