`
yuhen78
  • 浏览: 14403 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Thread, TimerTask 与 Quartz 实现任务调度

阅读更多

Thread, TimerTask  与 Quartz 实现任务调度 :
任务调度 :每过一段时间,系统自动执行某任务操作。

一、线程池方式:
import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class DBThread {
  private ScheduledExecutorService scheduler;  //它可另行安排在给定的延迟后运行命令,或者定期执行命令。
  public static void main(String [] arg){
  new DBThread().start();
  }
 private void start() {
       Calendar cal = Calendar.getInstance();   
      cal.setTimeInMillis(System.currentTimeMillis()); //获取系统当前时间
       scheduler = Executors.newScheduledThreadPool(1);  // 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
      // 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后 在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
    scheduler.scheduleAtFixedRate(runnable,0,5,TimeUnit.SECONDS); 
//scheduleAtFixedRate 如果任务的任何一个执行遇到异常,则后续执行都会被取消
  //参数介绍 
     runnable :需要调度的任务
      0:首次执行的延迟时间    
      5: 连续执行之间的周期
      TimeUnit.SECONDS :0和5 参数的时间单位 
      }
   Runnable runnable = new Runnable() {
    public void run() {
        System.out.println("running...");//调用执行任务
    }
  };
}

结合Spring框架使用:
1.TimerTask 方式简单调度:(缺点: Timer无法精确指定何时运行)
public class TimerTask extends java.util.TimerTask {
 @Override
 public void run() {
  // TODO Auto-generated method stub
      System.out.println("TimerTask方式调度的执行的方法");
 }
}
相关配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!--配置实现类-->   
    <bean id="timeTask" class="com.spring.TimerTask"></bean>  
    <bean id="TimeTasks"    class="org.springframework.scheduling.timer.ScheduledTimerTask" >
      <property name="timerTask" ref="timeTask"></property>  
        <!-- 指定任务运行周期,单位毫秒 -->  
        <property name="period" value="1000"></property>  
        <!-- 指定任务延时时间,即第一次运行之前等待时间,单位毫秒 -->  
        <property name="delay" value="1000"></property>  
    </bean> 
    <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
      <property name="scheduledTimerTasks">  
            <list>  
                <ref bean="TimeTasks"/>  
            </list>     
        </property>  
    </bean>
</beans>

2.Quartz实现调度:
2.1. MethodInvokingJobDetailFactoryBean 直接调用需要调度的方法
public class MyQuartz {
 public void getHello()
 {
   System.out.println("hello");  
 }

}
相关配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="myQuartz" class="com.spring.MyQuartz"></bean>
      
    <bean id="newJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <property name="targetObject" ref="myQuartz"></property>  
        <property name="targetMethod" value="getHello"></property>  
    </bean>  
     
   <bean id="simplerTrigger2" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
        <property name="jobDetail" ref="newJob"></property>  

        <!-- 设置延迟工作的第一次执行,单位毫秒 -->  
        <property name="startDelay" value="1000"></property>  

        <!-- 设置调度任务频度,单位毫秒 -->  
        <property name="repeatInterval" value="1000"></property>  
  </bean>  

<!-- 设置调度周期 --> 
  <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="newJob"></property>  
        <property name="cronExpression" value="0 59 23 * * ?"></property>
  </bean> 
   
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <!-- 接受一组触发器,可以接受一个列表 -->  
        <property name="triggers">  
            <list>  
                <ref bean="simplerTrigger2"/>  
                 <ref bean="cronTrigger"/>  
            </list>  
        </property>  
  </bean>
</beans>

2.2:继承QuartzJobBean 类方式调度
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.*;

public class MyQuartzJob extends QuartzJobBean {

 @Override
 protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
  
  System.out.println("running...");
  
  }  
}
相关配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 <bean id="quartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.spring.MyQuartzJob"></property>  
        <!-- 接受一个Map,其中包含了需要设置给jobClass的各种属性 -->  
        <property name="jobDataAsMap">  
            <map></map>  
        </property>  
   </bean>  
 <bean id="simplerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
        <property name="jobDetail" ref="quartzJob"></property>  
        <!-- 设置延迟工作的第一次执行,单位毫秒 -->  
        <property name="startDelay" value="1000"></property>  
        <!-- 设置调度任务频度,单位毫秒 -->  
        <property name="repeatInterval" value="1000"></property>  
    </bean>  
    <!-- 设置调度时间 --> 
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="quartzJob"></property>  
        <property name="cronExpression" value="0 59 23 * * ?"></property>
   </bean> 
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <!-- 接受一组触发器,可以接受一个列表 -->  
        <property name="triggers">  
            <list>  
                <ref bean="simplerTrigger"/>  
                <ref bean="cronTrigger"/>  
            </list>  
        </property>  
    </bean> 
  </beans>

 
表达式 解释
0 0 12 * * ? 在每天中午12:00触发
0 15 10 ? * * 每天上午10:15 触发
0 15 10 * * ? 每天上午10:15 触发
0 15 10 * * ? * 每天上午10:15 触发
0 15 10 * * ? 2005 在2005年中的每天上午10:15 触发
0 * 14 * * ? 每天在下午2:00至2:59之间每分钟触发一次
0 0/5 14 * * ? 每天在下午2:00至2:59之间每5分钟触发一次
0 0/5 14,18 * * ? 每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次
0 0-5 14 * * ? 每天在下午2:00至2:05之间每分钟触发一次
0 10,44 14 ? 3 WED 每三月份的星期三在下午2:00和2:44时触发
0 15 10 ? * MON-FRI 从星期一至星期五的每天上午10:15触发
0 15 10 15 * ? 在每个月的每15天的上午10:15触发
0 15 10 L * ? 在每个月的最后一天的上午10:15触发
0 15 10 ? * 6L 在每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6L 2002-2005 在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6#3 在每个月的第三个星期五的上午10:15触发
0 0 12 1/5 * ? 从每月的第一天起每过5天的中午12:00时触发
0 11 11 11 11 ? 在每个11月11日的上午11:11时触发.

分享到:
评论

相关推荐

    spring定时器(内含TimerTask实现和Quartz实现两种方式)

    本篇文章将详细探讨两种实现Spring定时任务的方法:基于Java内置的`TimerTask`和第三方库Quartz Scheduler。 首先,让我们看看如何使用`TimerTask`来实现Spring中的定时任务。`TimerTask`是Java的标准库类,它提供...

    Spring 中任务调度 TimeTask 与quartz简单用法

    本篇文章将详细探讨Spring中的两种常见任务调度工具:`TimerTask`和`Quartz`,以及如何配置`cronExpression`来精确控制任务的执行时间。 首先,我们来了解`TimerTask`。`TimerTask`是Java内置的定时任务类,它继承...

    TimerTask执行每日定时任务

    在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务的调度。这两个类属于`java.util`包,为开发者提供了执行周期性或一次性任务...在实际开发中,应根据项目需求选择合适的定时任务实现方式。

    java定时任务调度

    在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...

    Spring整合TimerTask实现定时任务调度

    需要注意的是,虽然`TimerTask`和Spring的`ScheduledTimerTask`可以实现定时任务调度,但在实际项目中,Spring的`@Scheduled`注解或Quartz等第三方库通常更为推荐,因为它们提供了更强大的定时任务管理能力,包括更...

    Java 定时任务及作业调度 Quartz与Timer

    1. **Job**:这是实际要执行的任务,你需要实现`org.quartz.Job`接口并重写`execute(JobExecutionContext context)`方法来定义任务逻辑。 2. **Trigger**:定义任务的执行时间,Quartz提供了多种Trigger类型,如...

    Sring最佳实践-集成任务调度服务

    在这个例子中,`MyTask`是你自定义的任务实现,`TimerFactoryBean`负责管理Timer实例并根据配置的tasks属性启动任务。 然而,对于更复杂的需求,如并发任务管理、灵活的调度策略和大规模的定时任务,Quartz是一个更...

    TimerTask与Timer设计时间监控

    在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务和调度。这两个类在处理需要定期执行的任务时非常有用,例如数据刷新、任务调度或者周期性的系统检查等。本篇文章将深入探讨`TimerTask`...

    使用Timer和TimerTask实现周期任务

    在这种情况下,`java.util.Timer` 和 `java.util.TimerTask` 类提供了非常有用的机制来实现周期性任务。本文将深入探讨这两个类的使用方法及其相关知识点。 首先,`Timer` 类是一个线程类,它负责调度任务的执行。...

    java定时执行多任务和quartz定时执行多任务

    总之,Java的定时任务可以通过内置工具或Quartz等外部库来实现。选择哪种方式取决于具体的需求和项目规模。对于简单的定时任务,内置工具足以满足;而对于复杂、需要高灵活性和扩展性的定时任务,Quartz是更好的选择...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    小议时序调度Timer和Quartz

    与`Timer`相比,Quartz提供了更复杂的调度选项,如cron表达式支持,可以精确地按小时、分钟甚至秒来设定执行时间。此外,Quartz还支持并发性和持久性,即使服务器重启,也能恢复已安排的作业。Quartz的工作原理包括...

    quartz 定时任务

    虽然这些类也能实现定时任务,但相比Quartz,它们的功能较为有限,不支持复杂的调度需求和集群环境。而Quartz则提供了更强大、更灵活的解决方案,适合企业级应用。 通过这个"spring+quartz demo"源码,你可以深入...

    Spring 任务调度

    `TimerTask`是一个抽象类,实现了`Runnable`接口,用于定义需要调度的任务。`Timer`类则用于管理和调度这些任务,通过`schedule`方法来安排任务的执行。 - **Quartz**:一个强大的开源作业调度框架,完全用Java编写...

    Java关于时间调度的几种实现方(Timer Quartz Spring)

    本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...

    几种任务调度的Java实现方法与比较

    本文由浅入深介绍四种任务调度的Java实现:ScheduledExecutor开源工具包Quartz开源工具包JCronTab此外,为结合实现复杂的任务调度,本文还将介绍Calendar的一些使用方法。Timer相信大家都已经非常熟悉java.util....

    TimerTask定时执行任务

    在本话题中,我们将深入学习如何在Spring2框架下利用`TimerTask`实现定时任务,以及在MyEclipse开发环境中,如何与Tomcat服务器配合使用。 【描述】:基于MyEclipse的集成开发环境,我们可以构建Java Web项目,并...

    Handler和TimerTask实现的简易定时器

    而TimerTask则更适用于后台任务,它的执行线程与创建它的线程无关,但不保证精确的定时执行,可能受到系统调度的影响。在实际开发中,根据需求选择合适的定时机制是非常重要的。 总结起来,通过Handler和TimerTask...

    基于Java的实例源码-任务调度 jconch.zip

    Java中任务调度的基础是`java.util.Timer`和`java.util.TimerTask`类,它们可以用来创建简单的定时任务。然而,对于更复杂的需求,如并发控制、任务依赖和可扩展性,我们通常会使用更强大的库,如Quartz或者Spring...

    timerTask实现每天定时一段时间内执行定时任务

    `RunTask` 可能是我们的主任务类,而 `TimeTask` 则可能是继承自 `TimerTask` 的具体任务实现。 ```java // TimeTask.java public class TimeTask extends TimerTask { @Override public void run() { // 在这里...

Global site tag (gtag.js) - Google Analytics