package timerTask;
import java.util.TimerTask;
public class SayHelloTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("测试TimerTask : Hello !!");
}
}
配置代码如下:javaTimer.xml
<bean id="sayHelloTask" class="timerTask.SayHelloTask"></bean>
<bean id="scheduledTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="sayHelloTask" />
</property>
<!-- 任务执行周期 5m 关于一些任务的参数请参考JDK doc文档和Spring相关文档-->
<property name="period">
<value>5000</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>
使用Java中的定时器比较简单,其提供的任务也比较简单, 下面来看看使用quartz来执行一个复杂的任务.
首先制定一个任务, 实现QuartzJobBean中的方法或者使用MethodInvokingJobDetailFactoryBean.
package timerTask;
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 {
System.out.println("使用Quartz 任务调度: Hello!!");
}
}
配置代码如下:quartzTimer.xml
<bean id="sayHelloJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>timerTask.SayHelloTaskUsingQuartz</value>
</property>
</bean>
<!--
<bean id="sayHello" class="timerTask.SayHelloTaskUsingQuartz"></bean>
<bean id="sayHelloJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="sayHello">
</property>
<property name="targetMethod" value="execute"></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>5000</value>
</property>
<property name="repeatCount" value="100" />
</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">
<list>
<ref bean="helloTrigger"/>
<ref bean="helloCronTrigger"/>
</list>
</property>
</bean>
附: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日上午10:15触发 |
"0 15 10 L * ?" |
|
每月最后一日的上午10:15触发 |
"0 15 10 ? * 6L" |
|
每月的最后一个星期五上午10:15触发 |
"0 15 10 ? * 6L 2002-2005" |
|
2002年至2005年的每月的最后一个星期五上午10:15触发 |
"0 15 10 ? * 6#3" |
|
每月的第三个星期五上午10:15触发 |
分享到:
相关推荐
### Spring执行定时任务的规则详解 在Spring框架中,实现定时任务主要依赖于Spring的集成模块Spring Integration或通过集成第三方库如Quartz来完成。本文将重点介绍如何利用Spring框架结合表达式规则来配置和执行...
在Spring框架中,定时任务是实现自动化操作的重要手段,它允许开发者在特定的时间间隔执行特定的任务,例如数据清理、报表生成等。在本实例中,我们关注的是Spring 3.0版本中的定时任务功能,这是一个基于Web工程的...
在本文中,我们将深入探讨Spring的定时任务功能,包括如何配置、创建和执行定时任务,以及如何利用其进行测试。 1. **Spring Task模块**: Spring在其核心模块中包含了Task模块,它提供了异步任务执行和定时任务...
在Spring框架中,XML配置是传统且广泛使用的方式来设置应用的组件和行为,包括实现定时任务。定时任务在软件开发中扮演着重要角色,它允许应用程序在预设的时间执行特定的任务,例如数据清理、日志归档或者发送通知...
在Spring框架中,定时任务是实现自动化操作的重要组成部分,它允许开发者在特定的时间间隔执行一些重复性的任务。本文将深入探讨Spring中的定时任务,并结合Eclipse和Maven项目环境进行讲解。 首先,Spring提供了两...
在需要执行定时任务的方法上添加@Scheduled注解,并指定cron表达式或fixedRate/fixedDelay参数,即可实现定时任务。Spring会自动扫描并注册这些任务,无需额外配置。例如: ```java @Component public class ...
3、SpringCloudSchedule定时任务(使用mybatis读写mysql数据库, spring实现定时任务, 按照间隔时间或固定时间方式执行定时任务) 4、定时自动运行任务(在数据库中设置好定时时间,及运行的程序,及参数) 5、C#...
2. **定义定时任务**:在需要执行定时任务的类上,我们可以定义一个或多个`@Scheduled`注解的方法。例如: ```java @Service public class MyTaskService { @Scheduled(fixedRate = 5000) // 每隔5秒执行一次 ...
2.通过Spring是JAR-quartz写的一个定时任务 1)普通的定时任务,定时完成指定的任务 2)通过前台动态分配定时任务 可指定多个任务,可同时执行任务,可以精确到时分秒扫描并执行任务 3)可以完成稍微复杂点的任务 ...
Spring的定时任务功能使得在Web项目中实现周期性任务变得轻松,无论是简单的定时执行还是复杂的调度需求,都有相应的解决方案。结合`@Scheduled`注解和`TaskScheduler`接口,开发者可以灵活地控制任务的执行时机和...
其中,Spring的定时任务功能是许多项目中的重要组成部分,它允许开发者安排和执行周期性的任务。本文将详细探讨Spring定时任务的关键知识点,并与提供的jar包列表关联。 首先,Spring定时任务主要依赖于`spring-...
本例主要探讨如何在Spring中配置和执行定时任务。 首先,我们要引入Spring Task的相关依赖。如果你使用的是Maven,你需要在pom.xml文件中添加以下依赖: ```xml <groupId>org.springframework.boot <artifactId>...
一个tomcat下部署了两个应用,一个是普通web应用syncc,另一个应用syncc_wx属于微信公众号后台程序涉及消息定时推送,tomcat未分离...”spring定时任务执行两次的异常排查处理.docx"针对上述描述问题进行分析和解决。
TimerTask是一个抽象类,我们需要创建它的一个子类,并重写run方法来执行定时任务的具体内容。使用这种方式,程序可以按照一定的频率执行,但这种方式是单线程的,所以不适合执行复杂的、高频率的定时任务。 接着是...
另外,`spring-aop.jar`对于使用基于AOP的方式来定义和执行定时任务是必须的。AOP允许我们在不修改原有代码的情况下,通过切面来增强功能,例如记录日志、性能监控等,这对于定时任务的管理和监控非常有用。 在Java...
Spring框架提供了多种方式来实现定时任务,这使得开发者可以在不同场景下选择最适合的方案。本文主要探讨了Spring中实现定时任务的三种主要方法:Java的`java.util.Timer`、Quartz库以及Spring自身的Task调度器。 ...
综上所述,通过Spring Cloud Schedule和MyBatis,我们可以方便地构建出按间隔时间或固定时间执行的定时任务,实现对MySQL数据库的高效读写。在实际开发中,可以根据业务需求灵活调整任务的执行策略,确保系统的稳定...
在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...