quartz是非常成熟的开源定时任务调度组件,在spring中稍作配置便可实现后台定时的任务调度了
此例中spring为2.5.6版本,quartz为1.5.2版本,均可在当前文档的附件中下载。
1、定义执行调度任务的类
/**
* @Title: SchedulingServiceImpl.java
* @Package xxx.xxx.system.scheduling
* @Description: TODO(用一句话描述该文件做什么)
* @Company neusoft
* @author fulg
* @date 2013-2-20 下午03:59:23
* @version V1.0
*/
package xxx.xxx.system.scheduling.service;
import xxx.xxxx.facade.IChuZhiFacade;
/**
* @ClassName: SchedulingServiceImpl
* @Description: 任务调度service
* @Company neusoft
* @author fulg
* @date 2013-2-20 下午03:59:23
*/
public class SchedulingServiceImpl {
public IChuZhiFacade chuZhiFacade;//具体执行任务的对外接口
public void setChuZhiFacade(IChuZhiFacade chuZhiFacade) {
this.chuZhiFacade = chuZhiFacade;
}
/**
* X任务1
* @Title: XXX
* @Description: TODO(这里用一句话描述这个方法的作用)
* @throws Exception
* @author fulg
* @date 2013-3-22 上午10:12:48
* @update 2013-3-22 上午10:12:48 fulg
*/
public void methdName_XXX_1() throws Exception{
System.out.println("******* Spring 自定义 调度 任务1 执行 *******");
chuZhiFacade.xxx1();
}
/**
* XX任务2
* @Title: XXX
* @Description: TODO(这里用一句话描述这个方法的作用)
* @throws Exception
* @author fulg
* @date 2013-3-22 上午10:12:48
* @update 2013-3-22 上午10:12:48 fulg
*/
public void methdName_XXX_2() throws Exception{
System.out.println("******* Spring 自定义 调度 任务2 执行 *******");
chuZhiFacade.xxx2();
}
}
2、配置spring对应配置文件
新建一个spring配置文件applicationContext-xxx-scheduling.xml
<?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">
<!-- 用户自定义的执行任务的类1,可定义多个类 -->
<bean id="schedulingService"
class="xxx.system.scheduling.service.SchedulingServiceImpl"
lazy-init="false" >
<property name="chuZhiFacade">
<ref bean="chuZhiFacade"/>
</property>
</bean>
<!-- 任务1 建立任务,并确定由哪个自定义的类的哪个方法来执行-->
<bean id="renWu_1"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
<property name="targetObject" ref="schedulingService"></property>
<property name="targetMethod" value="methdName_XXX_1"></property>
<!-- 不进行并发 -->
<property name="concurrent" value="false"></property>
</bean>
<!-- 任务2 -->
<bean id="renWu_2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
<property name="targetObject" ref="schedulingService"></property>
<property name="targetMethod" value="methdName_XXX_2"></property>
<property name="concurrent" value="false"></property>
</bean>
<!-- 任务1 调度时间设置 设置当前任务的 调度时间 -->
<bean id="renWu_1_Trigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- quartz-2.x
<bean id="renWu_1_Trigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
-->
<property name="jobDetail" ref="renWu_1"></property>
<!-- 每天早上1点运行 -->
<property name="cronExpression" value="0 0 1 * * ?"></property>
</bean>
<!-- 任务2 调度时间设置-->
<bean id="renWu_2_Trigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="renWu_2"></property>
<!-- 每天21-23点,每30分钟运行一次-->
<property name="cronExpression" value="0 0/30 21-23 * * ?"></property>
</bean>
<!-- 调度任务触发的总入口 -->
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="renWu_1_Trigger" />
<ref bean="renWu_2_Trigger" />
</list>
</property>
</bean>
</beans>
web.xml中对应添加新建的spring配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:springConfig/applicationContext.xml,
classpath:springConfig/applicationContext-xxx-scheduling.xml
... ....
</param-value>
</context-param>
至此齐活
如下附调度时间配置说明
Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:
●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;
●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;
●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;
●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;
●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;
●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围;
●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;
● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历
5日以后的第一天。1C在星期字段中相当于星期日后的第一天。
Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。
"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触发
关于quartz的更多信息参见:http://quartz-scheduler.org/
分享到:
相关推荐
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...
Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务;
spring mvc quartz 动态设置时间,可以实现任务调度的暂停和重启,在页面实现一个功能,可以动态设置调度的表达式,可以开启暂停任务调度
SpringBoot + Quartz 实现完全可控的定时任务调度,可自定义定时任务具体的实现类 后台采用: SpringBoot + Quartz + MySQL + Redis + JPA 前台采用: Beetl + Layui + Ajax + JS 运行一次:需要确定何时运行 永远...
基于quartz实现自定义时间的定时调度
集成了分布式任务调度框架 Quartz ,任务存储于数据库。 使用SpringMVC作为路由控制, 集成 Swagger2 提供实时 RESTful API文档。 数据持久层集成 Mybatis 框架。 使用自定义注解 @TargetDataSource 实现了多数据源...
公众企业应用几乎都会碰到任务调度的需求,任务调度本身涉及到多...如果直接使用自定义线程这种刀耕火种的原始办法,开发任务调度程序是一项颇具挑战性的工作。Java开源的好处就是:领域问题都能找到现成的解决方案。
Quartz-2.2.1 调度框架实现新增、修改、删除定时任务源码下载 本实例 使用了抽象和封装,如果对这个任务调度框架比较熟悉的话,还可以自定义的进行抽象和重构!!!!
主要为大家详细介绍了Quartz.Net调度框架的配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
强自定义:支持在线配置定时任务请求类型、请求路径、请求参数、Cron表达式,即时生效; 动态控制:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效; 执行策略:支持丰富的执行策略,包括:Get...
5.添加定时任务:不再使用作业自动调度框架Quartz实现作业调度,使用spring框架自带的调度器进行作业调度,简化了配置。@Scheduled是单线程的,每次最多只有一个作业在运行,如果调度时间到了作业还没执行完,就会...
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发Swift、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 Documentation 二次开发内容 1、数据库连接池修改为druid 2、...
内容提要:创建一个 Quartz Scheduler,关联上一个 Quartz Trigger 以编程方式调度前面编写的 ScanDirectoryJob 运行。 第三章. Hello Quartz (第三部分) 内容提要:通过配置 quartz.properties、quartz_jobs.xml ...
elastic-job和ddframe关系见下图Elastic-Job 主要功能定时任务: 基于成熟的定时任务作业框架Quartz cron表达式执行定时任务。作业注册中心: 基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册...
● 借助Quartz 时钟调度框架实现流失客户数据定时筛选功能; ● 使用zTree完成权限的展示和echart完成报表统计展示; ● 系统引入分布式缓存Redis技术,实现项目缓存统一处理,提高系统整体查询性能; 数据库和开发...
2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1....
任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9...
Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...
2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1...