java定时任务怎么实现,java定时执行某个方法

  java定时任务怎么实现,java定时执行某个方法

  如何解决写爬虫IP受阻的问题?立即使用。

  本教程运行环境:windows7系统,java8版本8,DELL G3电脑。

  最近,在项目开发中需要执行一些预定的任务。比如每天早上要分析前一天的日志信息,借此机会整理出几种实现预定任务的方法。因为项目采用的是spring框架,所以我结合spring框架来介绍一下。

  :

一分类

  

从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):

   1.Java自己的java.util.Timer类,它允许您调度java.util.TimerTask任务。这样,你的程序可以按一定的频率执行,但不能在指定的时间执行。一般用的比较少,本文就不详细介绍了。

  2.使用Quartz,它是一个强大的调度程序。它可以让你的程序在指定的时间或特定的频率被执行。配置稍微复杂一点,后面会详细介绍。

  3.Spring3.0以后自带的任务可以算是一个轻量级的Quartz,使用起来比Quartz简单很多,后面会介绍。

  :

从作业类的继承方式来讲,可以分为两类:

   1.作业类需要从特定的作业类基类继承,比如quartz中的org . spring framework . scheduling . Quartz . Quartz jobbean;Java.util.Timer需要从java.util.TimerTask继承

  2.Job类是一个普通的java类,不需要从任何基类继承。

  注意:个人推荐使用第二种方法,因为所有的类都是普通的,不需要提前区别对待。

  :

从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

   1.它将在每个指定的时间被触发。在Quartz中,对应的触发器是:org . spring framework . scheduling . Quartz . simple rigger bean。

  2.它将在指定的时间触发一次。在Quartz中,对应的调度器是:org . spring framework . scheduling . Quartz . crontriggerbean。

  注意:不是每个任务都可以使用这两个触发器。例如,java.util.TimerTask任务只能使用第一个。Quartz和spring任务都可以支持这两种触发条件。

  

二用法说明

  详细描述了如何使用各个任务调度工具,包括Quartz和spring task。

  

Quartz

  

第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。

  第一步:定义作业类

  导入org . quartz . jobexecutioncontext;

  import org . quartz . jobexecutionexception;

  导入org . spring framework . scheduling . quartz . quartz jobbean;

  公共类Job1扩展QuartzJobBean {

  private int超时;

  private static int I=0;

  //调度工厂实例化后,超时时间后开始调度。

  public void setTimeout(int time out){

  this . time out=time out;

  }

  /**

  *有待安排的具体任务

  */

  @覆盖

  受保护的void execute internal(JobExecutionContext上下文)

  引发JobExecutionException {

  System.out.println(定时任务进行中…);

  }

  }第二步:spring配置文件中配置作业类JobDetailBean

  bean name= job 1 class= org . spring framework . scheduling . quartz . jobdetailbean

  属性名称=jobClass 值=com.gy.Job1 /

  属性名=jobDataAsMap

  地图

  entry key=timeout value=0 /

  /地图

  /属性

  /bean描述:org . spring framework . scheduling . quartz . job detail bean有两个属性,jobClass属性是java代码中定义的任务类,jobDataAsMap属性是需要注入到这个任务类中的属性值。

  第三步:配置作业调度的触发方式(触发器)

  Quartz有两种作业触发器,即

  org . spring framework . scheduling . quartz . simpletriggerbean

  org . spring framework . scheduling . quartz . crontriggerbean

  第一种SimpleTriggerBean只支持以一定的频率调用任务,比如每30分钟一次。

  配置模式如下:

  bean id= simple trigger class= org . spring framework . scheduling . quartz . simpletriggerbean

  属性名称=jobDetail ref=job1 /

  属性名称=startDelay 值=0 /!-调度工厂实例化后,调度在0秒后开始-

  property name= repeat interval value= 2000 /!-每2秒调度一次-

  /bean第二个CronTriggerBean支持在指定时间运行一次,比如每天12:00运行一次。

  bean id= cron trigger class= org . spring framework . scheduling . quartz . crontriggerbean

  属性名称=jobDetail ref=job1 /

  !—每天12:00运行一次-

  属性名称=cronExpression 值=0 0 12 * *?/

  /bean有关cronExpression表达式的语法,请参见附录。

  第四步:配置调度工厂

  bean class= org . spring framework . scheduling . quartz . schedulerfactorybean

  属性名=触发器

  目录

  ref bean=cronTrigger /

  /列表

  /属性

  /bean description:此参数指定以前配置的触发器的名称。

  第五步:启动你的应用即可,即将工程部署至tomcat或其他容器。

  

第二种,作业类不继承特定基类。(推荐)

   Spring能够支持这种方式,得益于两个类:

  org . spring framework . scheduling . timer . methodinvokingtimertaskforybean

  org . spring framework . scheduling . quartz . methodinvokingjobdetailfactorybean

  这两个类对应的是spring支持的两种任务调度方式,即timer task和Quartz,是前面提到的java原生的。这里只写MethodinVokingJobDetailFactoryBean的用法。使用这个类的好处是我们的任务类不再需要继承任何类,而是一个普通的pojo。

  第一步:编写任务类

  公共类作业2 {

  公共void doJob2() {

  System.out.println(不要继承QuartzJobBean模式-调度正在进行中.);

  }

  }如你所见,这是一个普通的类,有一个方法。

  第二步:配置作业类

  bean id=job2

  class= org . spring framework . scheduling . quartz . methodinvokingjobdetailfactorybean

  属性名=targetObject

  bean class=com.gy.Job2 /

  /属性

  属性名称=targetMethod 值=doJob2 /

  属性名=concurrent 值=false /!-不同时安排作业-

  /bean描述:这一步是关键的一步。声明一个具有两个关键属性的MethodinVokingJobDetailFactoryBean:target object指定任务类,targetMethod指定运行方法。下一步与方法1相同,为了完整起见发布。

  第三步:配置作业调度的触发方式(触发器)

  Quartz有两种作业触发器,即

  org . spring framework . scheduling . quartz . simpletriggerbean

  org . spring framework . scheduling . quartz . crontriggerbean

  第一种SimpleTriggerBean只支持以一定的频率调用任务,比如每30分钟一次。

  配置模式如下:

  bean id= simple trigger class= org . spring framework . scheduling . quartz . simpletriggerbean

  属性名称=jobDetail ref=job2 /

  属性名称=startDelay 值=0 /!-调度工厂实例化后,调度在0秒后开始-

  property name= repeat interval value= 2000 /!-每2秒调度一次-

  /bean第二个CronTriggerBean支持在指定时间运行一次,比如每天12:00运行一次等等。

  bean id= cron trigger class= org . spring framework . scheduling . quartz . crontriggerbean

  属性名称=jobDetail ref=job2 /

  !—每天12:00运行一次-

  属性名称=cronExpression 值=0 0 12 * *?/

  /bean你可以根据实际情况选择以上两种方式中的一种。

  第四步:配置调度工厂

  bean class= org . spring framework . scheduling . quartz . schedulerfactorybean

  属性名=触发器

  目录

  ref bean=cronTrigger /

  /列表

  /属性

  /bean description:此参数指定以前配置的触发器的名称。

  第五步:启动你的应用即可,即将工程部署至tomcat或其他容器。

  至此,春石英的基本配置已经介绍完毕。当然,在使用之前,弹簧和石英的相应包装都要进口,这就不用说了。

  其实可以看出石英的配置看起来还是挺复杂的,没办法,因为石英其实是一个重量级的工具。如果我们只想简单地执行一些简单的定时任务,有没有更简单的工具?是啊!

  当前位置上一节介绍了石英在弹簧中的应用。本文介绍的是Spring3.0之后自主研发的定时任务工具spring task,可以比作一个轻量级的Quartz。使用简单,除了Spring相关的包之外不需要额外的包,支持注释和配置文件。

  形式,下面将分别介绍这两种方式。

  

Spring-Task

  第一步:编写作业类

  即普通pojo,如下:

  导入org . spring framework . stereotype . service;

  @服务

  公共类任务{

  5公共无效工单1() {

  System.out.println("任务正在进行。");

  }

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

  beans xmlns= http://www . spring framework . org/schema/beans

  xmlns:task= http://www . spring framework . org/schema/task

  xsi:架构位置= http://www。spring框架。org/schema/task http://。spring框架。org/schema/task/spring-task-3.0。xsd 第三步:spring配置文件中设置具体的任务

  任务:计划任务

  task:scheduled ref= task job method= job 1 cron= 0 * * * *?/

  /任务:计划的任务

  上下文:组件扫描base-package= com。gy。我的任务/说明:参考参数指定的即任务类,方法指定的即需要运行的方法,cron及每秒多次表达式,具体写法这里不介绍了,详情见上篇文章附录。

  上下文:组件扫描base-package= com。gy。我的任务/这个配置不消多说了,春天扫描注解用的。

  到这里配置就完成了,是不是很简单。

  

第一种:配置文件方式

   也许我们不想每写一个任务类还要在可扩展标记语言文件中配置下,我们可以使用注解@已安排,我们看看源文件中该注解的定义:

  @ Target({ Java。郎。注释。元素类型。方法,Java。郎。注释。元素类型。批注_类型})

  @保留(保留政策.运行时间)

  @已记录

  计划的公共@接口

  {

  公共抽象字符串cron();

  公共抽象长固定延时();

  公共抽象长固定费率();

  } 可以看出该注解有三个方法或者叫参数,分别表示的意思是:

  克朗:指定时间单位表达式

  固定延迟:官方文档解释:基于时间间隔的触发器,时间间隔从上一个任务的完成时间开始计算。时间单位值以毫秒为单位。即表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。

  固定汇率:官方文档解释:基于间隔的触发器,其中间隔从上一个任务的开始时间开始测量。时间单位值以毫秒为单位。即从上一个任务开始到下一个任务开始的间隔,单位是毫秒。

  下面我来配置一下。

  第一步:编写pojo

  导入org。spring框架。日程安排。注释。预定;

  导入org。spring框架。刻板印象。组件;

  @Component("taskJob ")

  公共类任务{

  @Scheduled(cron=0 0 3 * *?)

  公共无效工单1() {

  System.out.println("任务进行中。");

  }

  } 第二步:添加task相关的配置:

  ?可扩展标记语言版本=1.0 编码=UTF八号?

  豆子xmlns= http://www。spring框架。组织/架构/bean

  xmlns:xsi= http://。w3。org/2001/XML架构实例 xmlns:AOP= http://www。spring框架。组织/架构/AOP

  xmlns:context= http://www。spring框架。组织/架构/上下文

  xmlns:tx= http://www。spring框架。组织/架构/事务

  xmlns:task= http://。spring框架。组织/方案/任务

  xsi:schemaLocation=

  http://www.springframework.org/schema/beans http://www。spring框架。org/schema/beans/spring-beans-3.0。文件

  http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd

  http://www.springframework.org/schema/context

  http://www。spring框架。org/schema/JDBC/斯普林-JDBC-3.0。文件

  http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd

  http://www.springframework.org/schema/task http://www。spring框架。org/schema/task/spring-task-3.0。xsd

  default-lazy-init=false

  上下文:批注-配置/

  !—春天扫描注解的配置-

  上下文:组件扫描base-package= com。gy。我的任务/

  !—开启这个配置,春天才能识别@已安排注解-

  任务:批注驱动的调度程序=qbScheduler 模式=proxy/

  任务:计划程序id= QB调度程序 pool-size= 10 /说明:理论上只需要加上任务:注释驱动/这句配置就可以了,这些参数都不是必须的。

  好的配置完毕,当然春季任务还有很多参数,我就不一一解释了,具体参考文件文档http://www。spring框架。org/schema/task/spring-task-3.0。xsd。

  更多编程相关知识,请访问:编程视频!以上就是爪哇岛定时任务实现的几种方式是什么的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: