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定时任务的方法:基于Java内置的`TimerTask`和第三方库Quartz Scheduler。 首先,让我们看看如何使用`TimerTask`来实现Spring中的定时任务。`TimerTask`是Java的标准库类,它提供...
本篇文章将详细探讨Spring中的两种常见任务调度工具:`TimerTask`和`Quartz`,以及如何配置`cronExpression`来精确控制任务的执行时间。 首先,我们来了解`TimerTask`。`TimerTask`是Java内置的定时任务类,它继承...
在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务的调度。这两个类属于`java.util`包,为开发者提供了执行周期性或一次性任务...在实际开发中,应根据项目需求选择合适的定时任务实现方式。
在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...
需要注意的是,虽然`TimerTask`和Spring的`ScheduledTimerTask`可以实现定时任务调度,但在实际项目中,Spring的`@Scheduled`注解或Quartz等第三方库通常更为推荐,因为它们提供了更强大的定时任务管理能力,包括更...
1. **Job**:这是实际要执行的任务,你需要实现`org.quartz.Job`接口并重写`execute(JobExecutionContext context)`方法来定义任务逻辑。 2. **Trigger**:定义任务的执行时间,Quartz提供了多种Trigger类型,如...
在这个例子中,`MyTask`是你自定义的任务实现,`TimerFactoryBean`负责管理Timer实例并根据配置的tasks属性启动任务。 然而,对于更复杂的需求,如并发任务管理、灵活的调度策略和大规模的定时任务,Quartz是一个更...
在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务和调度。这两个类在处理需要定期执行的任务时非常有用,例如数据刷新、任务调度或者周期性的系统检查等。本篇文章将深入探讨`TimerTask`...
在这种情况下,`java.util.Timer` 和 `java.util.TimerTask` 类提供了非常有用的机制来实现周期性任务。本文将深入探讨这两个类的使用方法及其相关知识点。 首先,`Timer` 类是一个线程类,它负责调度任务的执行。...
总之,Java的定时任务可以通过内置工具或Quartz等外部库来实现。选择哪种方式取决于具体的需求和项目规模。对于简单的定时任务,内置工具足以满足;而对于复杂、需要高灵活性和扩展性的定时任务,Quartz是更好的选择...
Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...
与`Timer`相比,Quartz提供了更复杂的调度选项,如cron表达式支持,可以精确地按小时、分钟甚至秒来设定执行时间。此外,Quartz还支持并发性和持久性,即使服务器重启,也能恢复已安排的作业。Quartz的工作原理包括...
虽然这些类也能实现定时任务,但相比Quartz,它们的功能较为有限,不支持复杂的调度需求和集群环境。而Quartz则提供了更强大、更灵活的解决方案,适合企业级应用。 通过这个"spring+quartz demo"源码,你可以深入...
`TimerTask`是一个抽象类,实现了`Runnable`接口,用于定义需要调度的任务。`Timer`类则用于管理和调度这些任务,通过`schedule`方法来安排任务的执行。 - **Quartz**:一个强大的开源作业调度框架,完全用Java编写...
本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...
本文由浅入深介绍四种任务调度的Java实现:ScheduledExecutor开源工具包Quartz开源工具包JCronTab此外,为结合实现复杂的任务调度,本文还将介绍Calendar的一些使用方法。Timer相信大家都已经非常熟悉java.util....
在本话题中,我们将深入学习如何在Spring2框架下利用`TimerTask`实现定时任务,以及在MyEclipse开发环境中,如何与Tomcat服务器配合使用。 【描述】:基于MyEclipse的集成开发环境,我们可以构建Java Web项目,并...
而TimerTask则更适用于后台任务,它的执行线程与创建它的线程无关,但不保证精确的定时执行,可能受到系统调度的影响。在实际开发中,根据需求选择合适的定时机制是非常重要的。 总结起来,通过Handler和TimerTask...
Java中任务调度的基础是`java.util.Timer`和`java.util.TimerTask`类,它们可以用来创建简单的定时任务。然而,对于更复杂的需求,如并发控制、任务依赖和可扩展性,我们通常会使用更强大的库,如Quartz或者Spring...
`RunTask` 可能是我们的主任务类,而 `TimeTask` 则可能是继承自 `TimerTask` 的具体任务实现。 ```java // TimeTask.java public class TimeTask extends TimerTask { @Override public void run() { // 在这里...