quartz实现定时任务
项目背景:使用企业springboot三代框架实现一个交易平台小程序,涉及到物品竞价交易,要求竞价结束后,不在前三的竞价参与者直接退还保证金,前三名暂时保留保证金等等…
1.相关数据表
2.相关代码
代码如下(示例):
/*
* 项目名称:platform-plus
* 类名称:Token.java
* 包名称:com.platform.modules.job.task
*/
package com.platform.modules.job.task;
import com.platform.modules.app.utils.WechatUtil;
import com.platform.modules.ec.entity.EcMachineBidEntity;
import com.platform.modules.ec.entity.EcMachineEntity;
import com.platform.modules.ec.service.EcMachineBidService;
import com.platform.modules.ec.service.EcMachineService;
import com.platform.modules.paymanage.service.EcDepositOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component("bidDepoistOrderTask")
public class bidDepoistOrderTask {
@Autowired
private EcMachineService ecMachineService;
@Autowired
private EcDepositOrderService depositOrderService;
@Autowired
private EcMachineBidService bidService;
/**
* 竞价定时任务,竞价结束后,保留设备参与竞价的前3位的保证金,其他人立刻退还
*/
public void returnBidDepoist() {
//先获取竞价到期的设备
List<EcMachineEntity> bidOfflineList = ecMachineService.getBidEndMachine();
if(null!=bidOfflineList && bidOfflineList.size()>0){
for(EcMachineEntity entity:bidOfflineList){
//查询竞价结束后,不在竞价前3名的人员
List<String> bidList = bidService.getMemberIdOFBelowThird(entity.getMachineId());
if(null!=bidList && bidList.size()>0){
//将不在竞价前3的竞价人员的保证金改为可退状态
depositOrderService.updateStatusReturnBidDepoist(bidList, entity.getMachineId());
}
}
}
}
}
3.最后处理
其他博客都会介绍quartz的触发器等等,我这就不再赘述,而且我使用的框架只需要调接口创建定时任务写入到数据库中即可。
填入相应的beanName和methodName,cronExpression是定时任务的时间间隔设置,此处为每5分钟执行一次。然后再调用执行任务接口执行定时任务。