第一个例子。timer定时器。(这个比较简单,timer是java.util包下一个类)
为了更好的了解,我写了两个定时器类,很被集成TimerTask。
public class MyTask extends TimerTask{
int count = 0;
public void run() {
System.out.println("定时器TimerTask启动"+count);
count++;
}
}
++++++++++++++++++++++++++++++++++++++++++++
public class MyTaskB extends TimerTask{
int count = 0;
public void run() {
System.out.println("定时器MyTaskB启动"+count);
count++;
}
}
+++++++++++++++++++++++++++++++++++++++++++
在main方法中测试
Timer timer=new Timer();
/**
* 定时器任务制定,执行
* @param tag: 0.在指定的时间里,执行指定的任务;
* 1.在指定的时间里,按照指定的延迟,重复执行指定任务;
* 2.从指定的延迟后,执行指定任务;
* 3.从指定的延迟后,按照指定的延迟,重复执行指定的任务。
*
* @param mydate:指定的执行时间。只有在tag等于0、1才需要指定。
* @param delay: 延迟执行时间,毫秒数。只有在tag等于1、3才需要指定。
* @param period:间隔执行时间,毫秒数。只有在tag等于4才需要指定。
*/
//定时器,执行任务测试
public static void main(String[] args) {
new TestA().timer.schedule(new MyTask(), 1000);
new TestA().timer.schedule(new MyTaskB(), 4000);
}
注:timer还可以在web中应用。直接把MyTask()和MyTaskB()里面的方法作修改即可,也可以在任务完成后关掉timer定时。
总结:其实timer实现定时任务是很简单的,但是在想法开发是很少用到timer,而是用spring的Quartz。我也在网上找到了一些资料,现在总结一下。
1. Java定时器没有持久化机制。
2. Java定时器的日程管理不够灵活(只能设置开始时间、重复的间隔,设置特定的日期、时间等)//这点感同身受
3. Java定时器没有使用线程池(每个Java定时器使用一个线程)//想必在用timer是遇到了吧。
4. Java定时器没有切实的管理方案,你不得不自己完成存储、组织、恢复任务的措施
一下例子是我在myeclipse中创建了一个小项目,仅供参考。
第一步建立web项目(省略)
第二步导入必要包:如下
用到了一下包:
(这九个包我就不多说了,想必大家都知道他的用处。)
第三步:配置相关文件。web.xml、quartz.properties、quartz_job.xml这三个文件。这里我就没用spring的 applicationContext.xml文件来管理了。其实原理都是一样,都是在web启动时监听并启动定时器。配置spring的quartz定 时器有两种方法,一种是你用quartz.properties、quartz_job.xml,另外一种是用spring的 applicationContext.xml。其实在开发的时候我还是比较喜欢前面一种,因为简单、方便,而用spring的 applicationContext.xml里面本来就有各种配置,各种注入,是文件不够清晰(个人见解。呵呵)
(项目中文件的位置,直接放在src目录下)
第四步:web.xml文件配置(监听和启动定时器)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
<!-- timer -->
<context-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</context-param>
<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第五步:配置quartz.properties文件
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
注解:主要主用是启动quartz_job.xml。其余的都是一些配置性能的属性,可以在网上查看。
第六步:配置quartz_job.xml(里面主要配置定时器的一下属性)
<?xml version="1.0" encoding="GBK"?>
<quartz>
<!-- 每1分钟执行一次 -->
<job>
<job-detail>
<name>getDate</name><!-- 表示目标定时器的方法(也就是这个方法要定时的作用)-->
<group>job</group>
<job-class>com.timer.util.TimerTask</job-class><!-- 表示上面的getDate()方法路径(即所在的包)-->
</job-detail>
<trigger>
<cron>
<name>t1</name>
<group>job</group>
<job-name>getDate</job-name>
<job-group>job</job-group>
<cron-expression>0 0/1 * * * ?</cron-expression><!-- 设置定时器的触发时间即间隔时间(参数形式可以在网上查到自己想要的形式)-->
</cron>
</trigger>
</job>
</quartz>
第七步:写用两个类来测试定时器是否好用。
public class TimerTask implements Job {
private static Logger logger = Logger.getLogger(TimerTask.class);
public void execute(JobExecutionContext arg0) throws JobExecutionException {
try {
TimerOperation.getDate();
} catch (Exception ex) {
logger.info(ex.getMessage());
}
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class TimerOperation {
private static Logger logger = Logger.getLogger(TimerOperation.class);
public static void getDate()
{
String strCurrentDateTime = "";
Date currentDateTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
strCurrentDateTime = formatter.format(currentDateTime);
logger.info("定时器启动"+strCurrentDateTime);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
写这两个类就会看出,定时器不能直接调用自己写了定时方法,要先写一个类实现job的接口,然后在实现接口的execute()方法里面调用自己事先写好的定时任务。
好了一个定时器就写好了。运行项目,等待一分钟控制台就会出现
相关推荐
Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
在处理定时任务时,Spring提供了两种常见的解决方案:`java.util.Timer` 和 Quartz。这两个工具各有特点,适用于不同的场景。下面我们将深入探讨它们的区别。 首先,`java.util.Timer` 是Java标准库中的一个简单...
【标题】"quartz+spring定时器"涉及的是在Java应用中使用Spring框架与Quartz库来实现定时任务的管理。Quartz是一个开源的作业调度框架,它允许开发者定义、调度和执行作业,而Spring则提供了强大的依赖注入(DI)和...
Spring 定时器两种实现方式 Spring 定时器是 Spring 框架中的一种组件,用于实现定时任务的执行。...Spring 定时器提供了两种实现方式,Java Timer 定时和 Quartz 定时器,开发者可以根据实际情况选择合适的实现方式。
在Java Spring框架中,开发者有多种选择来实现定时任务的功能,其中最为流行的两种方式分别是使用Java自带的`Timer`类以及OpenSymphony的Quartz定时器。本文将重点探讨Quartz定时器的配置与使用,尤其是其时间设置的...
本文将详细介绍如何在Spring项目中集成Quartz定时器,并通过一个简单的示例来进行演示。 #### 一、环境准备 为了能够顺利地运行示例代码,我们需要准备以下必要的依赖库: - `jta-1.1.jar`:用于事务管理。 - `...
Spring框架和Java内置的定时器提供了两种不同的方式来实现这样的功能。 首先,我们来看Spring定时器。Spring使用的是Quartz库来实现定时任务管理。在给出的例子中,可以看到配置文件中定义了几个关键的bean: 1. `...
JDK定时器适合简单的定时需求,而Spring的`@Scheduled`注解适用于大多数场景,Quartz则在需要更高级特性和复杂调度时成为首选。理解这些工具的工作原理和使用方法,将有助于在实际开发中有效地实现和管理定时任务。
在Spring框架中,定时任务的实现通常有多种方式,这里主要讨论的是两种常见的方式:Java Timer和Quartz定时器。这两种方法都有其特点和适用场景,开发者可以根据项目需求来选择。 1. **Java Timer定时器** Java ...
Spring提供了两种定时任务框架:`java.util.Timer`和`@Scheduled`注解。然而,对于复杂的企业级应用,Quartz更具有优势,因为它支持集群、灵活的调度策略和丰富的API。 1. **引入依赖**: 要使用Quartz与Spring...
在本主题"spring的定时器设置"中,我们将深入探讨Spring如何配置定时任务,主要关注2.x和3.x版本的区别。 一、Spring 2.x 定时任务 在Spring 2.x中,定时任务主要是通过`org.springframework.scheduling.timer`包...
Spring定时器基于Java的`java.util.Timer`和`java.util.TimerTask`,但更进一步,它支持Quartz和SimpleScheduler这两种强大的定时任务库。Quartz是一个开源的作业调度框架,而SimpleScheduler则内置在Spring中,适用...
最常用的有两种方式:基于`java.util.Timer`的`TimerTask`和基于`Quartz`或`CronTrigger`的定时任务。本文主要讨论的是基于`TimerTask`的实现。 ### 使用JDK TimerTask `TimerTask`是Java标准库中的一个抽象类,...
首先,Spring支持多种定时任务的实现,包括基于`java.util.Timer`的TimerTask和基于Quartz Scheduler的Job。在本例中,使用的是`java.util.Timer`,这是一个轻量级的定时任务解决方案,适合简单的定时需求。 1. **...
在Spring框架中,实现定时任务有两种主流方式:使用`java.util.Timer`类或集成第三方库如Quartz。这两种方法各有优势: - **Java Timer**:简单易用,适合简单的定时任务需求。 - **Quartz**:功能强大且灵活,支持...
在提供的压缩包文件中,可能包含了使用上述两种方式实现的项目实例代码,你可以通过这些实例学习如何在不同的Spring版本下配置和使用定时任务。对于初学者来说,理解这些实例有助于深入掌握Spring的定时任务管理,并...
本文将深入探讨Spring框架下实现定时任务的几种主流方法,包括使用`java.util.Timer`(即Java定时器)、Spring定时器以及Quartz定时器,旨在帮助开发者根据具体业务场景选择最合适的技术方案。 ### 1. Java定时器...
虽然示例使用的是Spring的`Timer`,但在实际生产环境中,Quartz通常更受欢迎,因为它提供了更强大、更灵活的调度能力,例如支持更复杂的调度策略,如cron表达式,以及更好的并发控制和作业持久化。 使用Quartz集成...