实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

实现定时任务有6种方式:

  1. 使用线程创建定时任务
  2. 使用 TimerTask 创建定时任务
  3. 使用线程池创建定时任务
  4. 使用 Quartz 框架实现定时任务
  5. 使用 @Scheduled 注解实现定时任务
  6. xxl-job 实现分布式定时任务

一、使用线程创建定时任务

public class ThreadTask { public static 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 (Exception e) { // TODO: handle exception } } } }; Thread thread = new Thread(runnable); thread.start(); } }}

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

二、使用TimerTask创建定时任务

public class Timer4Task { static long count = 0; public static void main(String[] args) { TimerTask timer4Task = new TimerTask() { @Override public void run() { count ; System.out.println(count); } }; //创建timer对象设置间隔时间 Timer timer = new Timer(); // 间隔天数 long delay = 0; // 间隔毫秒数 long period = 1000; timer.scheduleAtFixedRate(timer4Task, delay, period); }}

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

三、使用线程池创建定时任务

public class ThreadPoolTask { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { // task to run goes here System.out.println("Hello !!"); } }; ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间 service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS); }}

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

四、使用Quartz框架实现定时任务

Quartz /kwɔːrts/

public class QuartzTask { public static void main(String[] args) throws SchedulerException { //1.创建Scheduler的工厂 SchedulerFactory sf = new StdSchedulerFactory(); //2.从工厂中获取调度器实例 Scheduler scheduler = sf.getScheduler(); //3.创建JobDetail, JobDetail jb = JobBuilder.newJob(SelfJob.class) //job的描述 .withDescription("this is a ram job") //job 的name和group .withIdentity("ramJob", "ramGroup") .build(); //任务运行的时间,SimpleSchedle类型触发器有效,3秒后启动任务 long time = System.currentTimeMillis() 3 * 1000L; Date statTime = new Date(time); //4.创建Trigger //使用SimpleScheduleBuilder或者CronScheduleBuilder Trigger t = TriggerBuilder.newTrigger() .withDescription("") .withIdentity("ramTrigger", "ramTriggerGroup") //.withSchedule(SimpleScheduleBuilder.simpleSchedule()) //默认当前时间启动 .startAt(statTime) //两秒执行一次,Quartz表达式,支持各种牛逼表达式 .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); //5.注册任务和定时器 scheduler.scheduleJob(jb, t); //6.启动 调度器 scheduler.start(); }}

/** * 继承Quartz框架中的Job,并重写execute方法 */public class SelfJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("quartz Job date:" System.currentTimeMillis()); }}

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

五、使用 @Scheduled 注解实现定时任务

@Configuration // 这里使用@Component也行public class ScheduleTask { //添加定时任务-- 50分钟执行一次 @Scheduled(fixedRate = 50 * 60 * 1000) private void updateTask() { Console.log("@Scheduled 注解实现定时任务 执行-------------------"); }}

启动类增加 @EnableScheduling 注解,启动服务。

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

六、使用 xxl-job 实现分布式定时任务

6.1 引入依赖

项目中引入下面的依赖:

<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>

6.2 配置文件增加配置

xxl: job: accessToken: executor: appname: demo ip: logpath: /data/applogs/xxl-job/jobhandler logretentiondays: -1 port: 9966 admin:# addresses: http://127.0.0.1:8089/xxl-job-admin addresses: http://49.234.28.149:8086/xxl-job-admin

6.3 任务接口

@Component@Slf4j@RequiredArgsConstructorpublic class XxlJobHandler{ @XxlJob("demoHandler") public ReturnT<Object> run (Object s) throws Exception { XxlJobLogger.log("xxl-job测试任务开始执行。【args: {}】", s); try { System.out.println("执行一次xxl-job打印任务!"); XxlJobLogger.log("xxl-job测试任务执行结束。"); return null; } catch (Exception e) { XxlJobLogger.log("xxl-job测试任务执行出错!", e); return null; } }}

或者这样写也行:

@JobHandler(value="demoHandler")@Componentpublic class DemoJobHandler extends IJobHandler { static int count; @Override public ReturnT<String> execute(String param) throws Exception { System.out.println("执行job任务" count ); return SUCCESS; }}

6.4 下载并启动 xxl-job

下载地址:https://github.com/xuxueli/xxl-job/

找到 xxl-job-admin 模块,初始化数据库并配置数据库资源、端口等,最后启动服务。

启动后在浏览器输入: http://localhost:8061/xxl-job-admin ,进入 xxl-job 管理后台:

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

添加好执行器,再新建一个任务:

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

启动服务后会每5秒执行一次,可以根据需求自定义执行时间和周期。

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

或者

实现定时任务的 6 种方式一网打尽(实现定时任务的几种方式)

七、总结

前5种定时任务方式可以归为一派,原因是这5个方式都是只适用于单实例部署,若是多实例部署那就会重复执行。比如有个定时任务是每天早上8点执行,而你部署了2个实例,那在8点的时候就会执行两遍。

这前5种方式中,使用 @Scheduled 注解最简单,更方便。

xxl-job 的方式,就是在布式集群的情况下,保证定时任务不被重复执行。执行原理同Nginx 类型,所有定时任务通过任务调度平台分发,也可配置负载均衡等。其中的时间表达式可以很灵活,可以自行搜索。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年7月19日 上午8:30
下一篇 2022年7月19日 上午8:32

相关推荐

  • 经典的客户关系管理案例(客户关系管理应用篇)

    客户关系管理(CRM)应用篇 客户关系管理是一种用于跟踪和管理与客户之间的关系的软件系统。通过CRM系统,企业可以更好地了解客户的需求和偏好,提供更加个性化的服务,提高客户满意度和…

    科研百科 2024年6月8日
    77
  • 基层党建亮点汇丨汶上:扎实推进农村网格化管理 构建社会治理新格局

    奋进新征程、建功新时代。2022年,大众日报·山东党建云平台全新启动“红星耀齐鲁”大型融媒报道活动,推出齐鲁党员星力量、基层党建亮点汇、第一书记风采录、高校党建品牌展四个单元板块。…

    科研百科 2023年11月14日
    143
  • 国家海洋局海洋研究所是什么级别(国家海洋局发文的科研项目)

    项目名称:海洋生态系统监测与保护关键技术研究 项目背景: 随着人类对海洋的依赖程度越来越高,海洋生态系统的保护也越来越重要。海洋生态系统是一个庞大的系统,包含许多生物和环境因素,这…

    科研百科 2024年8月1日
    41
  • 施工项目管理控制方法(施工项目管理控制)

    施工项目管理控制施工项目管理控制控制线2022年1月30日,中央文明办、国务院印发《关于加强创新企业管理及高校安全管理工作的通知》。文件中明确规定,要确保落实好《国家新闻出版署关于…

    科研百科 2024年9月27日
    22
  • 数码视讯内部控制自我评价报告

    公司董事会及全体董事保证本报告内容不存在任何虚假记载、误导性陈述或重大遗漏,并对报告内容的真实性、准确性和完整性承担个别及连带责任。 北京数码视讯科技股份有限公司(以下简称“本公司…

    科研百科 2024年7月10日
    47
  • 中标喜报文案简短

    中标喜报文案简短中标喜报文案简短(拼音:gao gao pao bu)今天看了《新唐书》对唐代史学、文化历史的评价,不禁竖起大拇指。(文章中,有一条从“大”向“正大”起“香”的历史…

    科研百科 2024年11月21日
    0
  • 科研选题的主要来源3044743019

    科研选题的主要来源 科研选题是科研工作中非常重要的一步,它决定了研究课题的方向和深度。科研选题的来源非常重要,它关系到研究结果的质量和可靠性。本文将介绍科研选题的主要来源,以期为科…

    科研百科 2024年11月10日
    0
  • 建筑工地库房管理软件(工地库房管理软件)

    工地库房管理软件:让管理更智能化 随着建筑行业的发展,工地库房管理变得越来越重要。传统的管理方式已经无法满足现代建筑的需求,因此,工地库房管理软件应运而生。这些软件可以帮助管理人员…

    科研百科 2024年6月5日
    75
  • 杭州人才认定 公示

    杭州人才认定公示 为更好地推进杭州市人才发展,提高杭州市人才竞争力,根据《杭州市人才引进办法》等相关法律法规,我们对杭州人才认定进行公示。 一、认定对象 本次认定的对象为在杭州市范…

    科研百科 2024年11月17日
    3
  • 海南省质安局:党建联盟“1+N” 推进重点项目数字化安全管理

    新海南客户端、南海网、南国都市报5月26日讯(记者 易帆 实习生 许雯瑄)5月25日,海口国兴大道海南中心项目上党旗飘扬,海南省质安局会同省大数据管理局、海口市质量安全监督站等6个…

    科研百科 2023年9月18日
    177