定时任务QuartzJob
来源:互联网 发布:迅雷手游网络加速器 编辑:程序博客网 时间:2024/06/01 07:36
//添加一个定时任务
QuartzJob quartz =new QuartzJob();String now = Utils.getNowTime("yyyy-MM-dd HH:mm:ss");
ScheduleJob job =new ScheduleJob();
job.setCronExpression("0/10 * * * * ?");(十秒循环一次)
job.setJobName(String.valueOf(pay.getLiveid()));
job.setJobGroup("price_jobs");//付费任务
job.setNow(now);
job.setContext(request.getSession().getServletContext());
job.setPayment(pay);quartz.addjob(job);
调用quartz中addjob方法添加一个定时任务。
/**
* 添加一个定时任务
* */
public void addjob(ScheduleJob scheduleJob){
try {
scheduler =gSchedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(scheduleJob.getJobName(),scheduleJob.getJobGroup(),this.getClass());// 任务名,任务组,任务执行类
// 触发器
CronTrigger trigger = new CronTrigger(scheduleJob.getJobName(),TRIGGER_GROUP_NAME);// 触发器名,触发器组
trigger.setCronExpression(scheduleJob.getCronExpression());// 触发器时间设定
jobDetail.getJobDataMap().put("scheduleJob",scheduleJob);
scheduler.scheduleJob(jobDetail,trigger);
// 启动
scheduler.start();
System.out.println("------------------end----------------");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
通过配置文件applicationContext配置计时任务。
<!-- 工作的bean -->
<beanid="myJob"class="com.sas.pdg.mrr.util.QuartzJob"/>
<!-- job的配置开始 -->
<beanid="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<propertyname="targetObject">
<refbean="myJob"/>
</property>
<propertyname="targetMethod">
<value>execute</value>
</property>
</bean>
<!-- job的配置结束 -->
通过配置文件进入quartz的execute方法
long s = Utils.getDistanceTime(scheduleJob.getNow(), Utils.getNowTime("yyyy-MM-dd HH:mm:ss"));
if(s > 59){
scheduler.pauseJob(scheduleJob.getJobName(),scheduleJob.getJobGroup());
System.out.println("------------------------job pause-----------------------");
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(scheduleJob.getContext());
IdentityService is = (IdentityService) ctx.getBean("identityService");
is.updateQuestionStateAndSendTemplate(scheduleJob.getPayment());
}
判断启动时间与当前时间是否相差59秒以上,若大于59秒以上表明用户没有在一分钟内撤回信息,则暂停计时任务,更改数据库信息并且发送模板消息(模板消息暂时移除)。
若用户在一分钟内点击撤回信息,则前端调用updateWithdrawQuestions接口,查询要撤回问题是否已经超过一分钟,若超过,则返回-1表示该问题不能撤离。若未超过,
且判断支付类型为提问支付且支付状态为已支付,
Map<String,Object> map = new HashMap<String, Object>();
map.put("description","撤销问题退款");
map.put("chargeId",live.getOrderid());
Refund refund = PPPPayMent.refund(map);
先执行退款,在增加一条payment信息,将price_jobs添加到job组中
job.setJobGroup("price_jobs");//付费任务
通过调用quartz调用暂停计时任务接口方法//暂停当前定时任务
QuartzJob quartz =new QuartzJob();
job.setJobName(String.valueOf(lid));
quartz.pauseTask(job);
调用quartz中的pauseTask方法:
/**
* 停止一个定时任务
* */
public void pauseTask(ScheduleJobscheduleJob){
try{
scheduler =gSchedulerFactory.getScheduler();
scheduler.pauseJob(scheduleJob.getJobName(),scheduleJob.getJobGroup());
System.out.println("任务名称 = [" +scheduleJob.getJobName()+"]已暂停");
}catch(SchedulerExceptione){
e.printStackTrace();
}
}
若判断支付类型不为提问支付或者支付状态为未支付,则只暂停计时任务
job.setJobGroup("0price_jobs");//0付费任务
//暂停当前定时任务
QuartzJob quartz = new QuartzJob();
job.setJobName(String.valueOf(lid));
quartz.pauseTask(job);
若price不大与0,且role为2说明为免费提问,因为是免费,所以不走ping++支付流程,因此不会走webhook,所以在处理完相应表中数据后(增加提问,修改数目,增加支付)后直接添加一个定时任务,与上述流程不同的是
job.setJobGroup("0price_jobs");//0付费任务
此处group中添加的是0付费任务,直接走上述流程。
- 定时任务QuartzJob
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 定时任务
- 负载均衡服务器采用的八种调度算法
- spark shell 运行 README.md 报错解决
- Protobuf的使用方法
- Mybatis定义不同模块的代码生成器
- [BZOJ1034][ZJOJ2008]泡泡堂BNB(贪心)
- 定时任务QuartzJob
- 2074 营救
- 为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
- pOJ 3276 Face The Right Way【思维 反转开关】
- wx网罗系列之翔实:使用C++开发wxWidgets程序
- 【并行计算】Windows系统下搭建MPI环境
- NoSQL
- 自定义View实现圆形水波进度条(下)
- Advanced-software-engineering-course-week1