定时任务

手写java可配置的定时任务 最近工作中需要用到定时任务,Scheduled可以满足我们的需求,但是领导要求我把它平台化,后面就自己查阅资料和自己的探索自己写了一个可配置的平台化的定时任务。 先来看看我们常规的Scheduled package com.wr.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.s 阅读详情

定时任务

定时任务场景:

  数据同步,交易信息,定时发送数据,活动推送 

  主题:分布式任务调度平台分布式领域中集群的话,保证定时Job幂等性   

 

Java定时job方案:

  Thread  TimerTast 线程池 quartz SpringBoot 内置schedul

1、Thread:

package com.toov5.JobTest;

public class Demo01 {
   
    static long count = 0;
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            
            @Override
            public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                    count++;
                    System.out.println(count);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
                
            }
        };
        
        Thread thread = new Thread(runnable);
        thread.start();
    }
     
    
}

TimerTask

package com.toov5.JobTest;

import java.util.Timer;
import java.util.TimerTask;

public class Demo02 {
    
    private static int count = 0;
    
    public static void main(String[] args) {
        //属于JDK自带的 util包里的哦
    TimerTask timerTask    = new TimerTask() {
            
            @Override
            public void run() {
                System.out.println(++count); 
                
            }
        };
        //定义触发规则
        Timer timer = new Timer();
        //天数
        long delay = 0;  //0表示任意的
        long period = 1000;
        timer.scheduleAtFixedRate(timerTask, delay, period);
    }
    
}

线程池:

package com.toov5.JobTest;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Demo03 {
    private static int count = 0;

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {

            @Override
            public void run() {
                System.out.println(++count);

            }
        };
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);

    }

}

Quartz: http://cron.qqe2.com/

package com.toov5.quartz;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class TestJob {
     public static void main(String[] args) throws SchedulerException {
         //1.创建Scheduler的工厂
         SchedulerFactory sf = new StdSchedulerFactory();
         //2.从工厂中获取调度器实例
         Scheduler scheduler = sf.getScheduler();


         //3.创建JobDetail  Job的详细信息  制定哪个job的
         JobDetail jb = JobBuilder.newJob(MyJob.class)
                 .withDescription("this is a ram job") //job的描述
                 .withIdentity("ramJob", "ramGroup") //job 的name和group
                 .build();

         //任务运行的时间,SimpleSchedle类型触发器有效
         long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
         Date statTime = new Date(time);

         //4.创建Trigger
             //使用SimpleScheduleBuilder或者CronScheduleBuilder
         Trigger t = TriggerBuilder.newTrigger()
                     .withDescription("")
                     .withIdentity("ramTrigger", "ramTriggerGroup")
                     //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                     .startAt(statTime)  //默认当前时间启动
                     .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
                     .build();

         //5.注册任务和定时器
         scheduler.scheduleJob(jb, t);

         //6.启动 调度器
         scheduler.start();

    }
}

要跑的业务:

package com.toov5.quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        //定时任务的 业务
        System.out.println("quartz MyJob date:" + new Date().getTime());
    }
}

每隔2s执行一次:

 

Linux关于定时任务设置 定时任务是实现重复的工作,让系统自动完成, 设置定时任务的方法 方法一:使用 cronie 软件可以设置定时任务 方法二:使用atd软件可以说设置定时任务 和闹钟类似,需要每次都设置 方法三:使用anacron 软件设置定时任务 设置时间不够灵活 anacron是系统自带的,在 /etc/cron* 开头的文件 1. /etc/cron.daily - - - 每天定时执行(24小时周期)... 阅读详情

相关推荐

ART2 配置说明

art2 配置说明 简介 整体简述 Driver and support简述 Bin简述 COMMON简述 test_setup简述 CUS223-720简述 config简述

手写定时器

定时器一、Timer优缺点优点缺点二、 ScheduleExecutorService三、 Spring Task(在项目里我感觉实际点)定时任务步骤开启定时任务添加定时任务 说要有一个定时器就好了,到点了自动督促我们学习或者干点别的 于是花了大半天的百度,我终于研究出来了简单的定时器,今天就介绍我研究的简单的三种 一、Timer   要是要实现定时任务,最先想到的肯定是java自带的类,就是Timer类,它在JDK类库中主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,或者进行一些周期性的工

qq_45251343的博客 1209

纯手写的定时器timer, 支持定时器管理【多个定时器运行互不影响】

js定时器 支持定时器管理【多个定时器运行互不影响】 [若在同一个业务类型下存在相同的业务ID,则清除之前的定时器,重启一个新的定时器]

写一个简单java定时任务

在这个例子中,我们设置了延迟时间是1000毫秒(即1秒),然后每隔1000毫秒(即1秒)重复执行任务。方法来实现我们想要执行的任务。类实现定时任务的基本方法。在实际应用中,你可能需要根据具体的需求来调整定时任务的执行逻辑和时间。对象在指定的延迟时间后执行。在这个例子中,我们设置的延迟时间是1000毫秒(即1秒)。请注意,这个例子中的定时任务只执行一次。如果你想要定时任务周期性地执行,你可以使用。在Java中,可以使用多种方式来实现定时任务。在这个例子中,我们首先创建了一个。类是一个抽象类,我们需要重写。

jjyybsm的博客 472

一款强大的定时执行工具

  一款定时/循环执行任务的软件,可以用来定时执行程序、DOS命令、从HTTP下载程序运行、结束进程、模拟按键、发送EMAIL、网络唤醒、消息提示、关机、重启、注销、锁定 等操作,都是本人曾经所需要的功能!   合理使用和搭配软件的各功能,可完成更多操作!适合对计算机系统较了解的人自由发挥。和按键精灵配合有很多事情都可以智能解决,不需要人工干预。

教你手写滴答定时器(看完这篇你就会手动写啦,保姆级讲解)—- 2020.3.25

先上完整滴答定时器部分代码!!! EXTI.c部分 #include ext.h #define SYSTICK_E 9 /** * @brief 用于SysTick初始化 * @param None * @retval None */ void TICK_Init(void) { //1.设置SysTick的时钟频率 SysTick->CTRL&=~(1<<2); //选择当前时钟为AHB/8,在72MHz情况下,SysTick就是9MHz } /** * @brief ms级别延迟,最大值在达到1864的情况下,会出现时间不精确 * @param u

手写轻量级分布式动态定时任务框架

如果此时新增1个任务变更的时候,则会在这张表里面去新增一条记录,写明其中变更的操作类型,例如ADD/REMOVE/MODIFY。每一个实例写一个固定时长定时任务,按照jobId去轮询看是否有消息的变更,从而将变更交接给CronTaskRegistrar去处理。定时任务需要按照幂等要求去设计,同时为了防止并行执行的问题,可以采用分布式锁,分布式常见的做法可以采用zk、redis或者mysql。通过自定义注解的方式,当应用启动的时候拦截这些注解,然后去数据库里面初始化这些调度任务。

No_Stoping的博客 1048

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

java手写分布式定时任务,定时任务分布式任务实现方案

定时任务的执行在分布式系统中很常见的一个问题,如果多台机器同时执行相同的定时任务,业务复杂则可能出现灾难性的后果。Zookeeper开源客户端Curator,使用Curator的leader选举功能可以实现Curator提供了两种选举方案:Leader Latch和Leader Election。(1)Leader Latch:随机从候选着中选出一台作为leader,选中之后除非调用close()...

weixin_42118161的博客 537

DeepSeek + 番茄小说:AI辅助小说开发最全指南

DeepSeek与番茄小说合作推出AI辅助小说创作系统,通过DeepSeek的文本生成能力(包括情节构建、角色塑造等)结合番茄小说的市场数据,为作者提供从创意到发布的全流程支持。系统包含智能创意生成器、角色设计、章节自动生成等核心模块,采用数据驱动优化策略,支持128K长文本处理和多风格模仿。开发架构采用Python+FastAPI技术栈,提供分层审核机制确保质量。该系统可帮助作者突破创作瓶颈,提升效率,同时提供订阅制、内容分成等多元变现模式。需注意版权问题和原创性保证。

weixin_41445009的博客 1677

基于STM32的智能工业机器人臂控制系统

工业机器人臂是智能制造的核心组件,广泛应用于装配、焊接、搬运等任务。基于STM32微控制器的机器人臂控制系统,通过集成伺服电机驱动、运动规划算法和实时通信功能,实现对多轴机械臂的精确控制与路径规划。本设计通过STM32实现了一套智能工业机器人臂控制系统,集成了高效的运动规划算法和实时控制功能。机器人臂系统根据输入的目标位置(如工件坐标),通过运动学计算生成动作轨迹,利用伺服电机驱动器控制关节运动。该系统广泛应用于工业自动化场景,如汽车制造中的零件装配、电子产品生产中的元件焊接以及物流系统中的物料搬运。

stm32d1219的博客 2568

springboot定时任务

目录 序言 一、静态:基于注解 阅读正文: 序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 一、静态:基于注解 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一......

乐昊的博客 9万+

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 878

【定时任务】Java 中 8 种定时任务

1、Timer类是 JDK1.3 专门提供的定时器工具,用来在执行指定任务,需要跟TimerTask一起配合使用工作流程:把 任务TimerTask添加到 任务队列TaskQueue中,由异步无限循环任务队列,如果队列不为空,则去执行任务。Timer案例:执行一个定时任务,每隔1秒执行一次,延迟2秒执行所以,阿里巴巴开发者规范中不建议使用它是JDK1.5 版本引进的定时任务,,设计的初衷是为了解决Timer单线程执行,多个任务之间会互相影响的问题。实现了该接口。

sco5282的博客 1万+

CloudCompare 二次开发(9)——半径滤波

基于PCL对CloudCompare软件进行二次开发,实现的算法功能是半径滤波

点云侠的博客 1401

当C#遇见声音魔法:从麦克风到文字的0.1秒奇幻漂流

为什么选300Hz?因为人声基频通常在85-255Hz,但清脆的“啊”可能到2kHz,所以300Hz是安全区!(参考知识库[1])

墨夶的博客 365

若依之定时任务

若依中定时任务是使用Quartz实现的,首先需要导入Quartz的依赖

wsb_2526的博客 1万+

【Qt开发教程】网络代理QNetworkProxy类详解及实战应用

QNetworkProxy 提供了一种灵活而强大的方式来配置和管理网络代理,通过设置代理类型、主机、端口和认证信息,可以使应用程序的所有网络请求通过代理服务器进行。结合 QNetworkProxyFactory 可以实现动态代理选择和自动配置,提高应用的网络通信能力和安全性。在实际应用中,通过合理设置代理、处理代理认证和错误情况,可以确保应用程序在复杂的网络环境中稳定运行,为用户提供可靠的网络访问体验。

科技改变人类,技术成就未来 1542

python实现定时任务的各种方法

python实现定时任务各种方法

y2016724的博客 3571

UG\NX二次开发 使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征

使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征。

王牌飞行员_里海的博客 850

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot之定时任务

论在单体项目,单个实例中的定时任务相关问题。开发中遇到的场景是:一个单体项目,就比如一个后台管理系统需要多个定时任务去做一些业务处理。 分布式定时任务是接下来要详细讨论的问题。

孙小鸿的博客 2367

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

玩转SpringBoot之定时任务

详细讲解SpringBoot利用注解创建静态定时任务,利用接口创建动态定时任务,利用@EnableAsync和@Async创建多线程定时任务

Java学习之道 5683

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

定时任务——@Scheduled注解做定时任务

在启动类上面加上 @EnableScheduling 注解 开启 定时任务 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.ann...

qq_41505160的博客 7587

定时任务—Spring定时任务

Spring 为我们提供了异步执行任务调度的方式,提供了 TaskExecutor、TaskScheduler接口,还有两个注解 @EnableScheduling、@Scheduled。

Eris_QwQ的博客 1258

Java如何实现定时任务?

看完这篇文章你会了解到什么是定时任务,以及为什么austin项目要引入分布式定时任务框架,可以把代码下载下来看到我是怎么使用xxl-job的。 01、如何简单实现定时功能? 我是看视频入门Java的,那时候学Java基础API的时候,看的视频也带有讲定时功能(JDK原生就支持),我记得视频讲师写了Timer来讲解定时任务。 当时并不知道定时任务有什么实际作用,所以在初学阶段的我,从来没使用过Timer来实现定时的功能。 再后来,我学到并发了。那时候的讲师提到了ScheduledExecutorServic

m0_68064743的博客 6356

linux定时任务_linux定时任务

1.定时任务介绍1.1 crond是什么crond是linux系统中用来定期执行命令或指定程序的一种服务或软件。特殊要求:(秒级别)crond服务就无法搞定了,一般工作中写脚本用守护进程执行[root@shellbiancheng jiaobenlianxi]# cat while1.sh #!/bin/shwhile true do uptime sleep 2 done1.2 linux系统c...

weixin_39967812的博客 2678
上一篇: 分散读取与聚集写入
下一篇: 分布式任务调度平台XXL-Job搭建
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值