Quartz框架提供了丰富的任务调度支持,比如,在何时执行何种任务,它是一个开源的由OpenSymphony维护的项目,开发者能够在Java EE,或单独的Java SE应用中使用它。无论是简单的任务调度,还是复杂的企业级应用,Quartz都能够很好地胜任。其中,这些任务可以是普通POJO,甚至还可以是EJB 3.0组件。
如果开发者需要开发如下方面的应用,则Quartz是理想的选择。
◆驱动工作流:比如,如果新创建的流程任务需要在2小时内处理完,则在2小时后Quartz会检查订单是否成功处理。如果没有处理,则Quartz会依据工作流定义的规则来对订单进行处理,销毁它,或者进行其他处理。
◆系统维护工作:比如,在每个工作日的固定时间将RDBMS中的内容导出为XML文件。
Spring 2.0提供了org.springframework.scheduling.quartz包,以支持Quartz任务调度集成。为提供用户的任务,开发者实现的类必须继承于quartz.QuartzJobBean抽象类。QuartzJobBean是Quartz中org.quartz.Job接口的简单实现(子类),Spring为简化Job接口的实现而提供了QuartzJobBean类。QuartzJobBean同Java 2 SDK中的TimerTask类似,用于定义任务本身。其中,executeInternal()方法定义待执行的任务,这同TimerTask中的run()类似。
为了指定更复杂的任务调度规则,开发者要使用Spring提供的CronTriggerBean,它是Quartz中org.quartz.CronTrigger的子类,Spring 2.0为简化CronTrigger子类的开发而提供了CronTriggerBean。CronTriggerBean比SimpleTriggerBean功能更强大,它能够控制任务执行的精确时间,比如,早上九点半需要执行某QuartzJobBean中给定的任务。借助于CronTriggerBean中的cronExpression属性能够设定任务的执行时机。
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz:首先我们来写二个被调度的类QuartzJob,及QuartzJobTwo,二个以上类似:
package com.writchie.quartz;
public class QuartzJob
{
public void work()
{
System.out.println("吴理琪提示您:Spring Quartz的任务调度1被调用!");
//定时调用的业务逻辑
}
}
package com.writchie.quartz;
public class QuartzJobTwo
{
public void work()
{
System.out.println("吴理琪提示您:Spring Quartz的任务调度2被调用 !");
//定时调用的业务逻辑
}
}
Spring的配置文件applicationContext.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.5.xsd">
<!-- 要调用的工作类 -->
<bean id="quartzJob" class="com.writchie.quartz.QuartzJob"></bean>
<bean id="quartzJobTwo" class="com.writchie.quartz.QuartzJobTwo"></bean>
<!-- 可继续加新的任务 -->
<!-- 要调用的工作类结束 -->
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<bean id="jobtask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJobTwo"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- 可继续加新的 -->
<!-- 定义调用对象和调用对象的方法结束 -->
<!-- 定义触发时间 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask"/>
</property>
<!-- cron表达式 此处定义为一直触发执行任务 -->
<property name="cronExpression">
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>
<bean id="doTime2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask2"/>
</property>
<!-- cron表达式 此处定义周一至周日的下午13:15触发-->
<property name="cronExpression">
<value>0 15 13 ? * SUN-SAT</value>
</property>
</bean>
<!-- 可继续加新的 -->
<!-- 定义触发时间结束 -->
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime"/>
<ref bean="doTime2"/>
<!-- 可继续加新的 -->
</list>
</property>
</bean>
<!-- 总管理类结束 -->
</beans>
测试程序:
package com.writchie.quartz;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzService {
public static void main(String[] args) {
System.out.println("测试任务调度开始...");
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
// context.getBean("startQuertz");
System.out.print("测试任务调度结束!\n");
}
}
相关推荐
可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合实现动态的改变定时任务的状态的一个...
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
Spring+Quartz实现定时任务的配置方法.rar
定时任务demo,Java语言,spring整合quartz配置文件实现定时任务
spring+quartz实现动态设置定时任务,自己的例子+心得+sql语句
Spring + quartz 定时任务修改定时时间不重启服务
定时任务quartz实现分组串行并行动态配置
上一次传错了资源了,这个是正确的,包含quartz动态定时任务的
spring整合quartz定时任务调度..........
springboot整合Quartz实现动态配置定时任务源码
spring3 配置quartz定时任务的使用。一个小例子。可直接运行Test.java。就可以启动定时任务。每10秒钟执行一次,可以根据自己配置。
基于Spring的Quartz动态定时任务增删改查,代码简洁。后端采用SpringMvc+Spring+Mybatis+Quartz,前端采用Bootstrap框架,数据库采用MySQL;完成定时任务动态任务初始化,增删改查
Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查,部署到tomcat即可看到定时任务执行效果。本人亲测,可用!
NULL 博文链接:https://duanfei.iteye.com/blog/1732839
本项目实现对quartz定时任务的增加、停止、恢复等功能。前端为jQuery+ bootstrap实现可视化操作,附带有mybatis分页插件应用
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
spring多个定时任务quartz配置
这个东西是我在配置spring和quartz实现定时任务时遇到的。因为spring2.0好像有bug,在spring配置文件中用普通的trigger注入时,会报序列化的错误。里面有MethodInvokingJobDetailFactoryBean和...
spring3.0+quartz-1.6.0实现定时任务
spring注解Quartz定时执行功能