- 浏览: 592711 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
18335864773:
用 pageoffice 吧. http://www.zhuo ...
使用Jacob输出word文档 -
dick1305:
很好,谢谢分享。
XFire创建WebService实例 -
wd530141534:
<c:if test="${ReleaseRe ...
Axis2创建WebService实例 -
wd530141534:
if(result != null && re ...
Axis2创建WebService实例 -
wd530141534:
String printerIp = req.getRemot ...
Axis2创建WebService实例
Quartz 是一个 Java 轻量级开源企业级的作业调度框架,官网地址为: http://quartz-scheduler.org/。
一. Quartz静态配置
1.配置applicationContext-quartz.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <!--Spring quartz 服务器启动会自动执行,在web.xml文件中加载--> <bean id="logJob1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.icsshs.mp.common.quartz.LogJob</value> </property> <property name="jobDataAsMap"> <map> <entry key="timeout"> <value>10</value> </entry> </map> </property> </bean> <bean id="personDataJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.icsshs.mp.common.quartz.MyJobBean</value> </property> </bean> <!-- SimpleTriggerBean只能指定工作执行的频率,不能指定工作执行的具体时间,单位为ms--> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="logJob1"></ref> </property> <property name="startDelay"> <value>6000</value> </property> <property name="repeatInterval"> <value>1000</value> </property> <property name="repeatCount"> <value>3</value> </property> </bean> <!-- cron表达式: 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日 1-31 , - * ? / L W C 月 1-12 or JAN-DEC , - * / 周几 1-7 or SUN-SAT , - * ? / L C # 年 (可选字段) empty, 1970-2099 , - * / 1.* 字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。 2./ 字符用来指定一个值的的增加幅度.比如在“秒”字段中设置为"0/15"表示"第0,15,30,和 45秒"。 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="personDataJobDetail"/> <property name="cronExpression" value="0/5 * * * * ?"/> </bean> <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="simpleTrigger" /> <ref local="cronTrigger" /> </list> </property> </bean> </beans>
2.定义自己的QuartzJobBean,从QuartzJobBean类继承实现。
public class LogJob extends QuartzJobBean { private int timeout; public int getTimeout(){ return timeout; } public void setTimeout(int timeout){ this.timeout = timeout; } protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("quartz do......"); } }
二. Quartz动态配置调度任务时间
1.需要构建Quartz数据库表,建表脚本在Quartz发行包的docs\dbTables目录下,
根据所使用的数据库选择不同的初始化数据脚本,例:tables_oracle.sql。
下载地址:http://www.quartz-scheduler.org/download/download-catalog.html
2.创建SchedulerService 类
public interface SchedulerService { /** * 根据 Quartz Cron Expression 调试任务 * @param cronExpression Quartz Cron 表达式,如 "0/10 * * ? * * *"等 */ void schedule(String cronExpression); /** * 根据 Quartz Cron Expression 调试任务 * @param name Quartz CronTrigger名称 * @param cronExpression Quartz Cron 表达式,如 "0/10 * * ? * * *"等 */ void schedule(String name,String cronExpression); /** * 根据 Quartz Cron Expression 调试任务 * @param cronExpression Quartz CronExpression */ void schedule(CronExpression cronExpression); /** * 根据 Quartz Cron Expression 调试任务 * @param name Quartz CronTrigger名称 * @param cronExpression Quartz CronExpression */ void schedule(String name,CronExpression cronExpression); /** * 在startTime时执行调试一次 * @param startTime 调度开始时间 */ void schedule(Date startTime); /** * 在startTime时执行调试一次 * @param name Quartz SimpleTrigger 名称 * @param startTime 调度开始时间 */ void schedule(String name,Date startTime); /** * 在startTime时执行调试,endTime结束执行调度 * @param startTime 调度开始时间 * @param endTime 调度结束时间 */ void schedule(Date startTime,Date endTime); /** * 在startTime时执行调试,endTime结束执行调度 * @param name Quartz SimpleTrigger 名称 * @param startTime 调度开始时间 * @param endTime 调度结束时间 */ void schedule(String name,Date startTime,Date endTime); /** * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次 * @param startTime 调度开始时间 * @param endTime 调度结束时间 * @param repeatCount 重复执行次数 */ void schedule(Date startTime,Date endTime,int repeatCount); /** * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次 * @param name Quartz SimpleTrigger 名称 * @param startTime 调度开始时间 * @param endTime 调度结束时间 * @param repeatCount 重复执行次数 */ void schedule(String name,Date startTime,Date endTime,int repeatCount); /** * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次, * 每隔repeatInterval秒执行一次 * @param startTime 调度开始时间 * @param endTime 调度结束时间 * @param repeatCount 重复执行次数 * @param repeatInterval 执行时间隔间 */ void schedule(Date startTime,Date endTime,int repeatCount,long repeatInterval) ; /** * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次, * 每隔repeatInterval秒执行一次 * @param name Quartz SimpleTrigger 名称 * @param startTime 调度开始时间 * @param endTime 调度结束时间 * @param repeatCount 重复执行次数 * @param repeatInterval 执行时间隔间 */ void schedule(String name,Date startTime,Date endTime,int repeatCount,long repeatInterval);
3.动态调度服务实现类SchedulerServiceImpl
import java.text.ParseException; import java.util.Date; import java.util.UUID; import org.quartz.CronExpression; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service("schedulerService") public class SchedulerServiceImpl implements SchedulerService { private Scheduler scheduler; private JobDetail jobDetail; @Autowired public void setJobDetail(@Qualifier("jobDetail") JobDetail jobDetail) { this.jobDetail = jobDetail; } @Autowired public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) { this.scheduler = scheduler; } @Override public void schedule(String cronExpression) { schedule(null, cronExpression); } @Override public void schedule(String name, String cronExpression) { try { schedule(name, new CronExpression(cronExpression)); } catch (ParseException e) { throw new RuntimeException(e); } } @Override public void schedule(CronExpression cronExpression) { schedule(null, cronExpression); } @Override public void schedule(String name, CronExpression cronExpression) { if (name == null || name.trim().equals("")) { name = UUID.randomUUID().toString(); } try { scheduler.addJob(jobDetail, true); CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(), Scheduler.DEFAULT_GROUP); cronTrigger.setCronExpression(cronExpression); scheduler.scheduleJob(cronTrigger); scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger); } catch (SchedulerException e) { throw new RuntimeException(e); } } @Override public void schedule(Date startTime) { schedule(startTime, null); } @Override public void schedule(String name, Date startTime) { schedule(name, startTime, null); } @Override public void schedule(Date startTime, Date endTime) { schedule(startTime, endTime, 0); } @Override public void schedule(String name, Date startTime, Date endTime) { schedule(name, startTime, endTime, 0); } @Override public void schedule(Date startTime, Date endTime, int repeatCount) { schedule(null, startTime, endTime, 0); } @Override public void schedule(String name, Date startTime, Date endTime, int repeatCount) { schedule(name, startTime, endTime, 0, 0L); } @Override public void schedule(Date startTime, Date endTime, int repeatCount, long repeatInterval) { schedule(null, startTime, endTime, repeatCount, repeatInterval); } @Override public void schedule(String name, Date startTime, Date endTime, int repeatCount, long repeatInterval) { if (name == null || name.trim().equals("")) { name = UUID.randomUUID().toString(); } try { scheduler.addJob(jobDetail, true); SimpleTrigger SimpleTrigger = new SimpleTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(), Scheduler.DEFAULT_GROUP, startTime, endTime, repeatCount, repeatInterval); scheduler.scheduleJob(SimpleTrigger); scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, SimpleTrigger); } catch (SchedulerException e) { throw new RuntimeException(e); } } }
SchedulerService 只有一个多态方法schedule,SchedulerServiceImpl类
实现SchedulerService接口,注入org.quartz.Schedulert和org.quartz.JobDetail,
schedule方法可以动态配置org.quartz.CronExpression或org.quartz.SimpleTrigger调度时间。
4.实现自己的org.quartz.JobDetail
需要使用org.springframework.scheduling.quartz.JobDetailBean
和org.springframework.scheduling.quartz.QuartzJobBean实现自己的QuartzJobBean。
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.Trigger; import org.springframework.scheduling.quartz.QuartzJobBean; public class MyQuartzJobBean extends QuartzJobBean { private SimpleService simpleService; public void setSimpleService(SimpleService simpleService) { this.simpleService = simpleService; } @Override protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecutionException { Trigger trigger = jobexecutioncontext.getTrigger(); String triggerName = trigger.getName(); simpleService.testMethod(triggerName); } }
MyQuartzJobBean继承org.springframework.scheduling.quartz.QuartzJobBean,
注入的SimpleService如下:
import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service("simpleService") public class SimpleService implements Serializable{ private static final long serialVersionUID = 122323233244334343L; private static final Logger logger = LoggerFactory.getLogger(SimpleService.class); public void testMethod(String triggerName){ //这里执行定时调度业务 logger.info(triggerName); } public void testMethod2(){ logger.info("testMethod2"); } }
5 .配置applicationContext-quartz.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="applicationContextSchedulerContextKey" value="applicationContextKey" /> <property name="configLocation" value="classpath:quartz.properties"/> </bean> <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.example.service.MyQuartzJobBean</value> </property> <property name="jobDataAsMap"> <map> <entry key="simpleService"> <ref bean="simpleService" /> </entry> </map> </property> </bean> </beans>
相关说明:
dataSource:项目中用到的数据源,里面包含了quartz用到的数据库表;
applicationContextSchedulerContextKey: 是org.springframework.scheduling.quartz.
SchedulerFactoryBean这个类中把spring上下文以key/value的方式存放在了quartz的上下文中了,
可以用applicationContextSchedulerContextKey所定义的key得到对应的spring上下文;
configLocation:用于指明quartz的配置文件的位置,如果不用spring配置quartz的话,
本身quartz是通过一个配置文件进行配置的,默认名称是quartz.properties,
里面配置的参数在quartz的doc文档中都有介绍,可以调整quartz,代码如下:
org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false org.quartz.scheduler.wrapJobExecutionInUserTransaction = false org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true org.quartz.jobStore.misfireThreshold = 60000 #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate #org.quartz.jobStore.useProperties = true org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = false org.quartz.jobStore.maxMisfiresToHandleAtATime=1
这里面没有数据源相关的配置部分,采用spring注入datasource的方式已经进行了配置。
6.测试 ,运行如下测试类
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainTest { public static void main(String[] args) { ApplicationContext springContext = new ClassPathXmlApplicationContext (new String[]{"classpath:applicationContext.xml", "classpath:applicationContext-quartz.xml"}); SchedulerService schedulerService = (SchedulerService) springContext.getBean("schedulerService"); //执行业务逻辑... //设置调度任务 //每10秒中执行调试一次 schedulerService.schedule("0/10 * * ? * * *"); Date startTime = parse("2009-06-01 22:16:00"); Date endTime = parse("2009-06-01 22:20:00"); //2009-06-01 21:50:00开始执行调度 schedulerService.schedule(startTime); //2009-06-01 21:50:00开始执行调度,2009-06-01 21:55:00结束执行调试 //schedulerService.schedule(startTime,endTime); //2009-06-01 21:50:00开始执行调度,执行5次结束 //schedulerService.schedule(startTime,null,5); //2009-06-01 21:50:00开始执行调度,每隔20秒执行一次,执行5次结束 //schedulerService.schedule(startTime,null,5,20); } private static Date parse(String dateStr){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return format.parse(dateStr); } catch (ParseException e) { throw new RuntimeException(e); } } }
- tables_oracle.rar (1.4 KB)
- 下载次数: 52
相关推荐
Spring框架作为一个全面的企业级应用开发解决方案,提供了强大的任务调度支持,而Quartz则是一个流行的开源作业调度库,能够与Spring很好地集成。现在,我们就来深入探讨"spring quartz 任务调度"这一主题。 首先,...
**Spring Quartz 任务调度** Spring Quartz 是一个基于 Java 的任务调度框架,它允许开发者定义定时任务并在应用程序中灵活地调度这些任务。这个框架是 Spring 和 Quartz Scheduler 的集成,提供了与 Spring 框架的...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...
在Spring的配置文件(如applicationContext.xml)中,我们需要配置SchedulerFactoryBean来启动Quartz调度器: ```xml <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean...
3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...
Spring 整合任务调度框架 Quartz 在软件开发中,任务调度框架是非常重要的一部分,它可以帮助开发者更好地管理和执行各种任务。在 Java 领域中,Quartz 是一个非常流行的任务调度框架,而 Spring 是一个非常流行的 ...
里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例
Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...
本项目"spring+quartz任务调度代码版"显然是一个结合了这两者的实践案例,旨在展示如何在Spring环境下集成和使用Quartz进行任务调度。 Spring框架是一个开源的应用框架,它提供了丰富的功能,包括依赖注入、AOP...
通过这种方式,Spring会自动启动Quartz调度器,并根据配置的触发器执行相应的任务。你还可以使用`@Scheduled`注解在方法级别定义定时任务,这是一种更简单的调度方式,适用于简单的场景。 总之,Spring Quartz定时...
- **Quartz简介**:Quartz是一个开源的作业调度框架,支持复杂的调度策略,如按日期、时间间隔或CRON表达式调度任务。 - **Spring与Quartz集成**:Spring通过`org.springframework.scheduling.quartz`包提供了一种...
基于Spring Boot的Quartz任务调度系统 项目概述 本项目是一个基于Spring Boot和Quartz的任务调度系统,旨在提供灵活的任务管理和调度功能。系统支持多种任务类型,包括Cron表达式任务和单次时间任务,并提供了丰富...
Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...
总的来说,Quartz任务调度器与Spring的整合使得我们能够在应用中轻松地实现定时任务的管理,而无需关心任务执行的具体细节。它为开发者提供了一套强大的工具,帮助我们在项目中实现定时任务的自动化,提高系统的运行...
SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...
Spring集成Quartz是一款高效的任务调度框架,用于在Java应用程序中执行计划、周期性的任务。Quartz与Spring的结合,使得我们可以充分利用Spring的依赖注入(DI)和AOP特性,简化了任务调度的复杂性。 首先,Quartz...
本篇将深入探讨如何利用Spring进行任务调度,并结合代码演示和Quartz库的使用来丰富这一主题。 首先,Spring提供了两种主要的任务调度机制:Spring内置的`TaskExecution`和`TaskScheduling`以及与Quartz Scheduler...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
在实际使用中,你需要在`applicationContext.xml`中配置SchedulerFactoryBean,通过它来创建和管理Quartz调度器。然后,定义你的Job Bean,并关联Trigger,告诉Quartz何时何地执行这个任务。例如: ```xml ...