目录
目的:订单 --》Quartz / 延迟队列 / 前端定时器
2、QuartzJobInfo接收传入的参数,相当于domain
3、QuartzUtils 工具类,封装起来可以实现动态的添加删除任务
目的:订单 --》Quartz / 延迟队列 / 前端定时器
1、订单未支付倒计时取消 (支付超时)
2、支付之后收获的待确认 (自动确认) ---- 收了货不确认,平台就不会把钱打给
总共4类型订单
1、领养
2、服务
3、goods
4、充值 特殊:充值后不会退钱
一、Quartz
quartz工作原理
看不懂了再回看一下详情
Cron表达式,或者直接根据下面的方法,给一个日期转换成Cron表达式。
/**
* 将日期转换为cron表达式
* @param fireDate
*/
public void setFireDate(Date fireDate) {
this.fireDate = fireDate;
String[] cronArr = new String[7];
for (int i = 0; i < cronArr.length; i++) {
cronArr[i] = "";
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(fireDate);
int second = calendar.get(Calendar.SECOND);
int minute = calendar.get(Calendar.MINUTE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH) + 1;
int year = calendar.get(Calendar.YEAR);
cronArr[0] = second + "";
cronArr[1] = minute + "";
cronArr[2] = hour + "";
cronArr[3] = day + "";
cronArr[4] = month + "";
cronArr[5] = "?";
cronArr[6] = year + "";
String cron = String.join(" ", cronArr);
this.setCronj(cron);
}
简单实现Quartz
1、导入依赖
<!--定时器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2、配置类中要将JobDetail+Trigger 一起绑定给scheduler
@Configuration
public class QuartzConfig {
@Bean
public JobDetail newJob(){
return JobBuilder.newJob(PrintTimeJob.class)//PrintTimeJob我们的业务类
.withIdentity("9527")//可以给该JobDetail起一个id
//每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取
.usingJobData("msg", "Hello Quartz")//关联键值对
.storeDurably()//即使没有Trigger关联时,也不需要删除该JobDetail
.build();
}
@Bean
public Trigger printTimeJobTrigger() {
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ? ");