首页 > 其他分享 >定制任务服务 ScheduledTaskService

定制任务服务 ScheduledTaskService

时间:2024-08-26 11:40:01浏览次数:11  
标签:springframework 任务 org scheduling import 定制 public ScheduledTaskService

自定义的定时任务服务 ScheduledTaskService

 

package com.joyupx.service.impl.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTask;
import org.springframework.scheduling.config.Task;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.scheduling.support.ScheduledMethodRunnable;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ScheduledFuture;

/**
 * 定制任务服务
 *
 * @author hapday
 * @since 1.0
 */
@Slf4j
@Service
public class ScheduledTaskService {

    // 线程池任务调度器
    private final ThreadPoolTaskScheduler threadPoolTaskScheduler;

    // 声明【定制任务未来】引用
    private ScheduledFuture<?> scheduledFuture;

    // 定时注解豆发送处理器
    @Autowired
    private ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor;

    public ScheduledTaskService(ThreadPoolTaskScheduler taskScheduler) {
        this.threadPoolTaskScheduler = taskScheduler;
    }

    //    @Scheduled ( fixedRate = 1000)  // 如果用注解,则 startTask 方法和 stopTask 方法将失效,因为它的优先级高于手动启动的优先级
    public void scheduleTask() {
        // 你的任务逻辑
        log.info("\n\n\t\t\t》》》运行定时任务《《《\n\n");
    }

    /**
     * 启动任务
     */
    public void startTask() {
        // 创建【任务的触发器】对象
        Trigger taskTrigger = new CronTrigger("*/1 * * * * *");
        // 周期性执行,比如这里设置为了 1 秒中执行一次
//        trigger = new PeriodicTrigger(1000);
        // 立即启动
//        future = taskScheduler.schedule(this::scheduleTask, new Date());
        scheduledFuture = threadPoolTaskScheduler.schedule(this::scheduleTask, taskTrigger);
    }

    /**
     * 停止任务
     */
    public void stopTask() {
        if (null != scheduledFuture) {
            // 通过未来对象取消任务的执行。
            scheduledFuture.cancel(false);
        }
    }

    /**
     * 查询运行中的任务
     *
     * @return 任务集
     */
    public Set<String> runningTaskList() {
        /*
         * 无法获取到非注解启动的定时任务
         * 只能获取到通过注解启动的任务
         */
        Set<ScheduledTask> scheduledTasks = scheduledAnnotationBeanPostProcessor.getScheduledTasks();
        Set<String> runningTaskSet = new HashSet<>(scheduledTasks.size());

        for (ScheduledTask scheduledTask : scheduledTasks) {
            // 获取任务
            Task task = scheduledTask.getTask();
            // 获取可运行的任务
            Runnable runnableTemp = task.getRunnable();
            // 声明【定时方法可运行】引用
            ScheduledMethodRunnable scheduledMethodRunnable = null;

            /*
             * 排除非定时方法的可运行任务
             */
            if (runnableTemp instanceof ScheduledMethodRunnable)
                scheduledMethodRunnable = (ScheduledMethodRunnable) runnableTemp;

            /*
             * 排除空对象
             */
            if (null == scheduledMethodRunnable) {
                continue;
            }

            Object taskFullyQualifiedName = scheduledMethodRunnable.getTarget();
            log.debug("\n\n######### Running task:{}", taskFullyQualifiedName);

            // 将task所关联的对象放到Set中(就是带@Scheduled方法的类)
            runningTaskSet.add(taskFullyQualifiedName.toString());
        }

        return runningTaskSet;
    }


}

 

标签:springframework,任务,org,scheduling,import,定制,public,ScheduledTaskService
From: https://www.cnblogs.com/hapday/p/18380672

相关文章

  • 任务悬赏小程序开发,无门槛提现的悬赏赚钱小程序搭建
    技术栈前端:vue3+uniapp后端:PHP数据库:MySQL一、关于任务悬赏小程序1.任务悬赏:线报任务,论坛,广告任务,游戏试玩,语音红包任务。2.支持会员发单功能,达人分销,任务查看,佣金提现。3.联系客服,会员充值等功能。4.系统含任务素材二、小程序功能特色任务悬赏小程序是一种创新的......
  • FreeRTOS 快速入门(八)之任务通知
    目录一、任务通知1、基本概念2、优势及限制3、通知状态和通知值二、任务通知的使用1、xTaskNotifyGive/ulTaskNotifyTake2、xTaskNotify/xTaskNotifyWait3、xTaskNotifyAndQuery一、任务通知1、基本概念FreeRTOS从V8.2.0版本开始提供任务通知这个功能,每个任务......
  • 【Linux】并发与并行:理解多任务处理的核心概念
    文章目录并发与并行:理解多任务处理的核心概念1.什么是并发?2.什么是并行?3.并发与并行的区别4.并发与并行的共同点与挑战5.选择并发还是并行?6.总结并发与并行:理解多任务处理的核心概念在现代计算中,性能和效率是关键问题。为了提高处理能力,计算机系统利用了并......
  • 图伸神经网络GCN实现图内点云分类任务(物体的部件分类)
    点云分类任务数据集下载关键代码数据集结构网络模型模型训练测试模型+可视化结果可能会出现的问题pyg没有配置好懒人专属(代码链接)本项目是一个简单的使用图中点分类代码,内涵完整的网络搭建、模型训练、模型保存、模型调用、可视化、的全过程。可以帮助初学者快速熟......
  • 延迟任务(DelayQueue,JDK开发)
    DelayQueue为了确定用户提交的播放记录是否变化,我们需要将播放记录保存为一个延迟任务,等待超过一个提交周期(20s)后检查播放进度。那么延迟任务该如何实现呢?1.1.延迟任务方案延迟任务的实现方案有很多,常见的有四类:DelayQueueRedissonMQ时间轮原理JDK自带延迟......
  • Infor CloudSuite软件二次开发:InforCloudSuite业务流程定制
    InforCloudSuite软件二次开发:InforCloudSuite业务流程定制InforCloudSuite简介InforCloudSuite平台概述InforCloudSuite是一个集成的企业资源规划(ERP)解决方案,专为特定行业设计,提供了一系列的云应用,旨在优化业务流程,提升运营效率。该平台融合了先进的技术,如人工智......
  • 开发指南056-定时任务
    业务场景中定时任务很常见。平台实现定时任务的原则如下:1、定时任务的定义在业务库(没必要集中到核心库,另外定时任务的服务要访问业务库)。2、定时任务的服务为独立微服务。平台的定时任务基于:    <dependency>      <groupId>org.quartz-scheduler</gr......
  • 开源|一款企业应用定制化开发平台,支持企业OA协同办公类信息化系统的建设和开发
    前言在数字化转型的浪潮中,企业面临着多样化的信息系统建设需求。现有的软件系统往往存在定制化程度低、开发周期长、成-本高等问题。此外,随着企业规模的扩大和业务的复杂化,传统的软件系统难以满足灵活多变的业务需为了解-决这些痛点,企业需要一款能够快速定制、灵活扩展、且成-本......
  • java+vue计算机毕设山西工程技术学院任务流程管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化快速发展的时代,高校及各类组织机构的日常运营与管理日益依赖于高效的任务流程管理系统。山西工程技术学院作为一所培养工程技术人才的高......
  • 009java jsp SSM springboot月度员工绩效考核管理系统绩效指标管理(源码+文档+PPT+任务
     项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:window......