java定时任务实现的几种方式注解(JAVA定时任务)

摘要:在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢?我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。一在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,…

大家好,又见面了,我是你们的朋友全栈君。

摘要:    在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢? 我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。 

一 

   在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢? 我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。
 

一  Java 基本的定时任务,总结方法有三种:

      1.1   创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果;
      java定时任务实现的几种方式注解(JAVA定时任务)

1.2   用Timer和TimerTask与第一种方法相比有如下好处:

  • 当启动和去取消任务时可以控制

  • 第一次执行任务时可以指定你想要的delay时间

java定时任务实现的几种方式注解(JAVA定时任务)

 1.3   用ScheduledExecutorService是从的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式,相比于上两个方法,它有以下好处:

  • 相比于Timer的单线程,它是通过线程池的方式来执行任务的

  • 可以很灵活的去设定第一次执行任务delay时间

  • 提供了良好的约定,以便设定执行的时间间隔

java定时任务实现的几种方式注解(JAVA定时任务)

二  Spring 定时任务,总结方式也有三种:

  2.1    ScheduledTimerTask:  Spring的ScheduledTimerTask定义了一个定时器任务的运行周期,遗憾的是,你可以指定任务执行的频度,但你无法精确指定它何时运行,这就需要用到第二种Quartz进行任务调度;

  •        创建一个业务任务,在Spring配置文件中声明 ;

  •        在Spring 配置文件中,配置ScheduledTimerTask ,并且关联上自定义的任务实例;

  •        启动定时器,Spring的TimerFactoryBean负责启动定时任务

 java定时任务实现的几种方式注解(JAVA定时任务)
  java定时任务实现的几种方式注解(JAVA定时任务)

 2.2    使用 Quartz:

  •       首先还是老样子定义业务逻辑任务:

java定时任务实现的几种方式注解(JAVA定时任务)

在Spring中声明并且配置作业调度的触发方式

java定时任务实现的几种方式注解(JAVA定时任务)

java定时任务实现的几种方式注解(JAVA定时任务)

这里 Quartz的作业触发器有两种,分别是

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean



第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔一段时间运行一次。

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  

    <property name="jobDetail" ref="myJob" />  

    <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->  

    <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->  

</bean> 

 

第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次,如上配置;

  • 配置调度工厂

org.springframework.scheduling.quartz.SchedulerFactoryBean,代码如上;

  • 启动你的应用即可

 2.3   使用 Spring-Task

         Spring自带的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种:

         第一步:编写任务类;TaskJob,method job1  –代码省略

         第二步:在spring配置文件头中添加命名空间及描述

<beans xmlns="http://www.springframework.org/schema/beans"  

    xmlns:task="http://www.springframework.org/schema/task"   

    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 

        第三步:spring配置文件中设置具体的任务

<task:scheduled-tasks>   

        <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>   

</task:scheduled-tasks>  

<context:component-scan base-package="com.alibaba.mytask" /> 

说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式,具体写法这里不介绍了,<context:component-scan base-package=”com.alibaba.mytask” />spring扫描注解用的。

 

以上示例有一处小坑,一眼能看出的小问题,考验大家调试和解决问题的能力,拒绝不理解思路完全复制代码的行为

有问题可以评论,看到后会及时回复.

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129782.html原文链接:https://javaforall.net

(2)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html中怎样使表格居中,HTML中怎么让表格居中[通俗易懂]

    html中怎样使表格居中,HTML中怎么让表格居中[通俗易懂]回答:IE6/7及IE8混杂模式中,text-align:center可以使块级元素也居中对齐。其他浏览器中,text-align:center仅作用于行内内容上。解决这个问题比较好的方式,就是为所有需要相对父容器居中对齐的块级元素设置“margin-left:Auto;margin-right:Auto”。但这个方式IE6/IE7/IE8的混杂模式中不支持,所以还要设置父容器的”text…

    2022年9月16日
    2
  • PyTorch 最新安装教程(2021-07-27)

    PyTorch 最新安装教程(2021-07-27)PyTorch最新安装教程(2021-07-27)前言1.安装Anaconda2.检查显卡,更新驱动3.创建PyTorch环境4.配置清华TUNA镜像源5.安装PyTorch6.测试前言万事开头难!这句话又一次被我验证。记得前不久刚陷入Tensorflow2.0的安装困境,这一次又被PyTorch搞哭辽。孩子太难了o(╥﹏╥)o,不过还好最终成功安装,感谢全网资源,感谢大佬们的博客!被我一次一次试了出来。1.安装AnacondaAnaconda是一个用于科学计算的P

    2022年6月7日
    34
  • 如何快速成长为不可或缺的技术人才?

    如何快速成长为不可或缺的技术人才?

    2021年10月22日
    41
  • EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解EditPlus的查找,替换,文件中查找支持以下的正则表达式:ExpressionDescription\tTabcharacter.\nNewline..Matchesanycharacter.|Eitherexpressiononitsleftandrightsidematchesthetargetstring.Forexa

    2022年5月13日
    197
  • 02.pycharm中配置PyInstaller打包工具

    02.pycharm中配置PyInstaller打包工具我用的环境版本python解释器:3.6.6pycharm开发工具:2018.3.6社区版PyInstaller打包工具:4.5.1pycharm中配置PyInstaller打包工具opts可选的参数参数含义-F-onefile,打包成一个exe文件-D-onefile,创建一个目录,包含exe文件,但会依赖很多文件(默认选项)-c-console,-nowindowed,使用控制台,无窗口(默认)-w-Windowed,-noconsole,使用窗

    2025年7月7日
    4
  • C语言结构体详解_结构体组成

    C语言结构体详解_结构体组成结构体(struct)1、定义一般格式为:struct结构名{类型变量名;类型变量名;…}结构变量;结构名是结构的标识符不是变量名。下面举一个例子来说明怎样定义结构变量

    2022年8月2日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号