Java定时任务定时器

简介: Java定时任务定时器并没有那么难Spring提供注解在指定时间去调用这个方法执行一次就可以用到

Java定时任务定时器并没有那么难

Spring提供注解在指定时间去调用这个方法执行一次就可以

用到

@EnableScheduling

//一分钟执行一次

@Scheduled(cron = “0/60 * * * * ?”)


1、查询采集定时任务表collect_shop_task有没有要执行的定时任务

2、将要执行定时任务的集合按照商户分组组装成map

3、[important]获取output输出结果,并且更新成功记录 handlerBusinessOperator 处理业务操作工厂实现类,如类型标准对照、好店模型等

如果失败,进入捕获异常(定时任务这步是必须的)【定时任务有可能为批量,可能存在成功或失败,失败最好存到fail表】

/**
 * @author
 * @version 1.0
 * @description: 采集店铺转为意向店铺自动定时任务
 * @date 2022/2/8 10:53
 **/
@Slf4j
@Component
@EnableScheduling
public class CollectShopAutoTask {
    @Resource
    private CollectShopTaskService collectShopTaskService;
    //定时任务工厂
    @Resource
    private CollectionShopHandlerService collectionShopHandlerService;
    /**
     * 1、查询采集定时任务表collect_shop_task有没有要执行的定时任务
     * 2、将要执行定时任务的集合按照商户分组组装成map
     * 3、[important]获取output输出结果,并且更新成功记录 handlerBusinessOperator 处理业务操作工厂实现类,如类型标准对照、好店模型等
     * 如果失败,进入捕获异常(定时任务这步是必须的)
     */
    @Scheduled(cron = "0/60 * * * * ?")
    public void execute() {
        log.info("采集店铺定时任务 collect shop task is start");
        //1、查询采集定时任务表collect_shop_task有没有要执行的定时任务
        List<CollectShopTask> taskList = collectShopTaskService.listByStatus(CollectShopConstant.TASK_STATUS_INIT);
        if (CollectionUtil.isEmpty(taskList)) {
            log.info("no taskList, process is end");
            return;
        }
        //2、将要执行定时任务的集合按照商户分组组装成map
        Map<Long, List<CollectShopTask>> merchantTaskMap = taskList.stream()
                .collect(Collectors.groupingBy(CollectShopTask::getMerchantId));
        merchantTaskMap.forEach((key, value) -> {
            log.info("当前处理商户id:{}", key);
            value.forEach(collectShopTask -> {
                try {
                    //3、获取output输出结果,并且更新成功记录 handlerBusinessOperator 处理业务操作工厂实现类,如类型标准对照、好店模型等
                    //获取对应的哪个service
                    /**
                     *     TYPE_OPEN_COMPARE(1, "开店对照"),
                     TYPE_GOODS_COMPARE(2, "好店对照"),
                     TYPE_AROUND_ANALYSIS(3, "周边分析"),
                     TYPE_TEST(4, "投资测算")
                     */
                    //定时任务工厂 处理工厂
                    CollectShopBusinessService collectShopBusinessService
                            = collectionShopHandlerService.generateBusinessService(collectShopTask.getType());
                    //采集业务操作接口 处理业务操作工厂实现类,如类型标准对照、好店模型等,返回output
                    String response = collectShopBusinessService.handlerBusinessOperator(collectShopTask);
                    // 更新成功记录 collect_shop_task
                    collectShopTaskService.updateSuccess(response, collectShopTask);
                } catch (Exception e) {
                    //如果错误了,则捕获异常
                    log.error("处理商户:{}, 店铺:{}, 任务:{} 发生异常 e:{}", key, collectShopTask.getShopName(),
                            CollectShopTaskEnum.getByType(collectShopTask.getType()).getText(), e);
                    String failMess = "异常";
                    if (StringUtils.isNotEmpty(e.getMessage())) {
                        failMess = e.getMessage().substring(0, (e.getMessage().length() > 1024 ? 1024
                                : e.getMessage().length()));
                    }
                    //collect_shop_task_fail_record
                    collectShopTaskService.updateFail(failMess, collectShopTask);
                }
            });
        });
    }
}
相关文章
|
10月前
|
安全 Java
Java定时器
Java定时器
50 0
|
3月前
|
Java 调度 Spring
Java中几种定时任务使用与详解
Java中几种定时任务使用与详解
87 0
|
2月前
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
200 3
|
3月前
|
安全 Java
Java多线程基础-10:代码案例之定时器(一)
`Timer` 是 Java 中的一个定时器类,用于在指定延迟后执行指定的任务。它常用于实现定时任务,例如在网络通信中设置超时或定期清理数据。`Timer` 的核心方法是 `schedule()`,它可以安排任务在延迟一段时间后执行。`
75 1
|
1月前
|
Java 调度
java定时任务3分钟一次
7月更文挑战第6天
29 1
|
1月前
|
负载均衡 Java 调度
Java中的定时任务实现详解
Java中的定时任务实现详解
|
1月前
|
Java 调度 Spring
Java中的定时任务调度与管理
Java中的定时任务调度与管理
|
1月前
|
监控 Java 调度
使用Java实现高性能的定时任务调度
使用Java实现高性能的定时任务调度
|
1月前
|
Java 调度 开发者
Java定时器的使用方法与调度策略
Java定时器的使用方法与调度策略
|
2月前
|
XML Java 数据格式
一篇文章讲明白java的常用定时任务的几种方式
一篇文章讲明白java的常用定时任务的几种方式
30 0