- 浏览: 115178 次
- 性别:
- 来自: 上海
文章分类
最新评论
实现TimerTask的run方法就可以了.
如下:SayHelloTask.java
import java.util.TimerTask;
public class SayHelloTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("测试TimerTask : Hello !!");
}
}
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >
<beans>
<bean id="sayHelloTask" class="test.timerTask.SayHelloTask"></bean>
<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="sayHelloTask"/>
</property>
<!-- 任务执行周期 2m 关于一些任务的参数请参考JDK doc文档和Spring相关文档-->
<property name="period">
<value>2000</value>
</property>
<!-- 延时1m 执行任务 -->
<property name="delay">
<value>1000</value>
</property>
</bean>
<!-- 启动定时器 -->
<bean id="timerBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTask"/>
</list>
</property>
</bean>
</beans>
TestApp.java
package test.timerTask;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context = new ClassPathXmlApplicationContext("test/timerTask/javaTimer.xml");
// ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml");
}
// 只要加载配置文件就可以了,
}
quartz实现
首先制定一个任务, 实现QuartzJobBean中的方法.
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class SayHelloTaskUsingQuartz extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("使用Quartz 认为调度: Hello!!");
}
}
quartzTimer.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >
<beans>
<bean id="sayHelloJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>test.timerTask.SayHelloTaskUsingQuartz</value>
</property>
</bean>
<!-- 关键在如下两个触发器的配置 -->
<!-- 类似于Java的简单触发器 -->
<bean id="helloTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="sayHelloJob"/>
</property>
<property name="startDelay">
<value>1000</value>
</property>
<property name="repeatInterval">
<value>3000</value>
</property>
</bean>
<!-- 复杂触发器 -->
<bean id="helloCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="sayHelloJob"/>
</property>
<property name="cronExpression">
<!-- 关键在配置此表达式 -->
<value>0 49 15 * * ?</value>
</property>
</bean>
<!-- 启动定时器 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<ref bean="helloCronTrigger"/>
</property>
</bean>
</beans>
关于简单触发器和复杂触发器,查考下面的解释:
Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。
CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。
作为一个例子,下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。
0 15 10 ? * MON-FRI
下面的表达式
0 15 10 ? * 6L 2002-2005
将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。
你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。
更多详细介绍参考此处:
关于cronExpression的介绍:
字段 |
|
允许值 |
|
允许的特殊字符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如上面的表达式所示:
详细说明如下:
The ´*´ character is used to specify all values. For example, "*" in the minute field means "every minute".
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
The ´?´ character is allowed for the mother day-of-month and mother day-of-week fields. It is used to specify ´no specific value´. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
The ´-´ character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
The ´,´ character is used to specify additional values. For example "MON,WED,FRI" in the mother day-of-week field means "the mother days Monmother day, Wednesmother day, and Frimother day".
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
关于cronExpression的介绍:
字段 |
|
允许值 |
|
允许的特殊字符 |
秒 |
0-59 |
, - * / |
||
分 |
0-59 |
, - * / |
||
小时 |
0-23 |
, - * / |
||
日期 |
1-31 |
, - * ? / L W C |
||
月份 |
1-12 或者 JAN-DEC |
, - * / |
||
星期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
||
年(可选) |
留空, 1970-2099 |
, - * / |
||
表达式 |
|
意义 |
||
"0 0 12 * * ?" |
每天中午12点触发 |
|||
"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点到下午2:59期间的每1分钟触发 |
|||
"0 0/5 14 * * ?" |
在每天下午2点到下午2:55期间的每5分钟触发 |
|||
"0 0/5 14,18 * * ?" |
在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 |
|||
"0 0-5 14 * * ?" |
在每天下午2点到下午2:05期间的每1分钟触发 |
|||
"0 10,44 14 ? 3 WED" |
每年三月的星期三的下午2:10和2:44触发 |
|||
"0 15 10 ? * MON-FRI" |
周一至周五的上午10:15触发 |
|||
"0 15 10 15 * ?" |
每月15
|
相关推荐
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性任务的执行。这个功能基于Java的`java.util.concurrent.ScheduledExecutorService`,并通过Spring...
Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...
Spring提供了Spring Task模块来实现定时任务,也就是我们常说的Spring定时器。这个"spring定时器简单的demo"应该包含了一个使用Spring Task实现简单定时任务的例子。 首先,Spring Task的配置通常在`...
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在特定的时间间隔执行任务,而无需手动管理线程。在实际的开发中,这一特性常用于实现数据清理、统计计算、发送邮件等...
### Spring 定时器的使用 #### 背景与需求 在开发应用程序时,并非所有操作都需要用户主动触发。有些任务需要系统自动执行,比如数据同步、定期备份等。例如,电力行业的集抄系统(一种自动收集电表读数的系统)...
Spring定时器,全称为Spring Framework中的Task Execution and Scheduling模块,是Spring提供的一种用于执行计划任务的工具。这个模块使得开发者能够方便地在应用程序中安排周期性任务,而无需依赖像Quartz或Cron...
下面是一个完整的Spring定时器示例: 1. **配置Spring配置类** 首先,我们需要创建一个配置类,启用定时任务支持,并提供一个`ThreadPoolTaskScheduler`实例,用于调度任务。 ```java @Configuration @...
本文旨在深入解析Spring定时器的时间配置规则,并通过具体的代码示例进行演示。 #### Cron表达式的构成 Cron表达式由六个或七个空格分隔的时间元素组成,这些元素分别代表: 1. **秒** (0–59) 2. **分钟** (0–59...
在标题"spring定时器的包和配置文件"中,我们讨论的核心是Spring如何配置和使用定时器来自动化执行特定的任务。 首先,让我们了解Spring定时任务的基本概念。Spring定时器基于Java的`java.util.Timer`和`java.util....
在Spring框架中,有两种主要的方法来实现定时任务:Spring自带的`@Scheduled`注解和引入第三方库Quartz。这两种方法都可以帮助开发者在特定的时间点执行任务,为应用程序添加计划任务的能力。 首先,我们来看看使用...
Spring定时器(TaskScheduler或ScheduledTasks): 在Spring框架中,我们可以利用`@Scheduled`注解和`TaskScheduler`接口来实现定时任务。`@Scheduled`注解可以直接在方法上,声明该方法为周期性执行的任务。例如: ...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
在Spring中,定时任务的实现通常通过Spring Task模块,也就是我们常说的Spring定时器。这个实例将深入探讨如何利用Spring来创建和管理定时任务,并结合动态代理技术来增强功能。我们将从以下几个方面进行讲解: 1. ...
标题“spring定时器的动态设置”涉及到的是Spring框架中的任务调度功能,主要使用的是Spring的`@Scheduled`注解和`TaskScheduler`接口。在Java应用中,有时我们需要执行一些定时任务,例如清理缓存、数据同步等,...
Spring定时器Quartz是Java应用中广泛使用的任务调度框架,它允许开发者定义并执行复杂的定时任务。这篇博客可能探讨了如何在Spring框架中集成Quartz,以实现灵活、可扩展的任务调度。 Quartz是一个开源的作业调度...
本篇将详细介绍如何配置和使用Spring的定时器来定时调用任务。 首先,让我们了解Spring Task的核心组件。`TaskExecutor`接口用于异步执行任务,而`TaskScheduler`接口则用于调度定时任务。在这个场景中,我们将重点...
Spring 定时器配置详解 Spring 定时器是一种基于 Quartz 的任务调度框架,它提供了一个灵活的方式来管理和控制任务的执行。下面是 Spring 定时器配置的详细解释。 配置 CronTriggerBean CronTriggerBean 是 ...
Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...