最近接收到一个需求,页面如下:
需要根据指定时间执行定时任务,接到需求后也是研究了半天,结合网上老师们的教程,现分享给大家我写的相关内容,直接上代码片段
我做的只是支持单机版,如果大家感兴趣可以改造成使用redis分布式缓存,师傅领进门,修行在个人,只是提供一个思路,在有的内容上大家可以随意发挥你们的想法能力,不过需要我这块砖做基础
1、首先是服务重启后,我们指定的定时任务需要重新加载到内存中
import com.hsgd.brandhub.task.service.SrLuckDrawAddPrizeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
public class HsgdStartTaskInitSrLuckDrawPrizeAddTasks implements ApplicationRunner {
@Resource
private SrLuckDrawAddPrizeService srLuckDrawAddPrizeService;
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("[掌柜抽奖]追加奖品定时任务列表查询开始...");
try {
srLuckDrawAddPrizeService.queryUnexecutedSrLuckDrawAdditionalTasks();
log.info("[掌柜抽奖]追加奖品定时任务初始化完成...");
} catch (Exception e) {
e.printStackTrace();
log.info("[掌柜抽奖]追加奖品定时任务初始化异常...");
}
}
}
package com.hsgd.common.domain.Brandhub.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class HsgdSrLuckDrawAddPrizeCronVO implements Serializable {
private Long additionId;
private Long activeId;
private Long configId;
private Integer addNum;
private String addCronTime;
}
import com.hsgd.common.domain.Brandhub.vo.HsgdSrLuckDrawAddPrizeCronVO;
import java.util.List;
public interface SrLuckDrawAddPrizeService {
void addSrLuckDrawPrizeCronTask(HsgdSrLuckDrawAddPrizeCronVO param);
void removeSrLuckDrawPrizeCronTask(HsgdSrLuckDrawAddPrizeCronVO param);
Integer getScheduledTasksSize();
void queryUnexecutedSrLuckDrawAdditionalTasks();
void additionSrLuckDrawPrizeNum(HsgdSrLuckDrawAddPrizeCronVO param);
List<String> getScheduledTasksList();
}
import com.hsgd.brandhub.task.handler.CronTaskRegistrarHandler;
import com.hsgd.brandhub.task.handler.HsgdSrLuckDrawAdditionTask;
import com.hsgd.brandhub.task.service.SrLuckDrawAddPrizeService;
import com.hsgd.common.brandhub.util.SpringContextUtil;
import com.hsgd.common.domain.Brandhub.vo.HsgdSrLuckDrawAddPrizeCronVO;
import com.hsgd.common.feign.brandhub.SrLuckDrawAddPrizeClient;
import com.hsgd.common.lang.DateUtil;
import com.hsgd.common.serialize.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
@Slf4j
public class SrLuckDrawAddPrizeServiceImpl implements SrLuckDrawAddPrizeService {
@Resource
private CronTaskRegistrarHandler cronTaskRegistrarHandler;
@Resource
private SrLuckDrawAddPrizeClient srLuckDrawAddPrizeClient;
@Override
public void addSrLuckDrawPrizeCronTask(HsgdSrLuckDrawAddPrizeCronVO param) {
String cron = getCronStr(param);
String taskKey = param.getActiveId() + "-" + param.getConfigId() + "-" + param.getAddNum() + "-" + getFormatTime(param);
HsgdSrLuckDrawAdditionTask newTask = new HsgdSrLuckDrawAdditionTask();
newTask.setHsgdSrLuckDrawAddPrizeCronVO(param);