`
pheh
  • 浏览: 11477 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

对quartz的总结

阅读更多

Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了quartz的应用,下面就讲一下如何在spring中使用quartz。

spring的配置:

xml 代码
  1. <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  2.  <property name="triggers">  
  3.   <list>  
  4.    <ref bean="simpleTrigger"/>  
  5.    <ref bean="cornTrigger"/>  
  6.   </list>  
  7.  </property>  
  8. </bean>  
  9. <bean id="schedulerControl" class="com.pheh.scheduler.Schedule">  
  10.  <property name="scheduler">  
  11.   <ref bean="schedulerFactoryBean"/>  
  12.  </property>  
  13. </bean>  
  14.   
  15. <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  16.  <property name="jobDetail">  
  17.   <ref bean="methodInvokingJobDetail"/>  
  18.  </property>  
  19.  <property name="startDelay">  
  20.   <value>1000</value>  
  21.  </property>  
  22.  <property name="repeatInterval">  
  23.   <value>3000</value>  
  24.  </property>  
  25. </bean>  
  26. <bean id="cornTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  27.  <property name="jobDetail">  
  28.   <ref bean="methodInvokingJobDetail"/>  
  29.  </property>  
  30.  <property name="cronExpression">  
  31.   <value>0 0 */1 * * ?</value>  
  32.  </property>  
  33. </bean>  
  34.   

 

Job:
org.quartz.Job是一个接口,只定义了void execute(JobExecutionContext context)throws JobExecutionException;一个方法。当定时任务被触发后,系统会自动调用实现了该接口的方法。在spring中,org.springframework.scheduling.quartz.QuartzJobBean对其进行了封装,使用了Template Method模式。主要是为了在使用jobDataMap时更加方便。QuartzJobBean有两个方法,
public final void execute(JobExecutionContext context) throws JobExecutionException
Job接口中定义的,spring在该方法里进行了些处理,将jobDataMap中的值注入到该Job的实现者中

protected abstract void executeInternal(JobExecutionContext context) throws JobExecutionException
这是一个抽象方法,用户在扩展了QuartzJobBean后,要自己实现该方法,在其中添加相应的业务逻辑

JobDetail:
JobDetail描述了一个任务具体的信息。在Spring中,JobDetailBean对JobDetail进行了封装(继承了JobDetail)。
private String name;//名称
private String group = Scheduler.DEFAULT_GROUP;//组
private String description;//描述
private Class jobClass;//定时任务触发时,回调的class,该class要实现Job接口或继承QuartzJobBean
private JobDataMap jobDataMap;//该任务存储的数据,在回调的时候也可以使用
private boolean volatility = false;//是否持久化到org.quartz.spi.JobStore中
private boolean durability = false;//当该任务完成后,是否还在JobStore中继续保留该任务
private boolean shouldRecover = false;//当系统重新启动后,是否再次执行该任务
对于jobDataMap,它是是一个封装过的Map,使用方法同Map,如
jobDetailBean.getJobDataMap().put(target,value);
如果使用了QuartzJobBean,在使用jobDetailBean时,可将target的值设成QuartzJobBean的子类的属性名称,这样,在定时触发时,spring会自动将与target对应的value值注入到QuartzJobBean的子类中去。如。

java 代码
  1. ...   
  2. public class ReminderManager extends QuartzJobBean{   
  3.  private String reminderStr = "";   
  4. }   
  5. ...   
  6. jobDetailBean.getJobDataMap().put(reminderStr,"abcdefg");   
  7. ...  


这样当该任务被触发后,在ReminderManager中,reminderStr的值就会被注入为"abcdefg"。

Trigger:
trigger就是触发器。Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是:
1.你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件
2.当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。
目前的Quartz实现中,存在两种Trigger,SimpleTrigger和CronTrigger,在spring中分别用SimpleTriggerBean和CronTriggerBean对其进行封装。SimpleTrigger是简单触发器,如从某日到某日,每个一定时间进行一次提醒,在这段时间内进行多少次提醒;CronTrigger是复杂触发器,用来执行calendar-like的任务,可设定一些复杂的触发规则,如每年的x月的第y个星期五,或是每个星期天的几点进行提醒。后面附加一个日常语义与cronTrigger的转化

Trigger
private String name;//名称
private String group = Scheduler.DEFAULT_GROUP;//组
private String jobName;//所关联的jobDetail的名称
private String jobGroup = Scheduler.DEFAULT_GROUP;//所关联的jobDetail的组
private String description;//描述
private JobDataMap jobDataMap;//该触发器存储的数据,在回调的时候也可以使用
private boolean volatility = false;//是否持久化到org.quartz.spi.JobStore中

SimpleTrigger
private Date startTime = null;//开始日期
private Date endTime = null;//结束日期
private Date nextFireTime = null;//下次的触发时间
private Date previousFireTime = null;//上次的触发时间
private int repeatCount = 0;//重复次数
private long repeatInterval = 0;//重复间隔
private int timesTriggered = 0;/已触发的次数

SimpleTriggerBean
private JobDetail jobDetail;//所关联的JobDetail,方便在配置文件中使用

CornTrigger
private CronExpression cronEx = null;//触发条件表达式,它有一个String型的setter
private Date startTime = null;//开始日期
private Date endTime = null;//结束日期
private Date nextFireTime = null;//下次的触发时间
private Date previousFireTime = null;//上次的触发时间
private transient TimeZone timeZone = null;//所在时区

CronTriggerBean
private JobDetail jobDetail;//所关联的JobDetail,方便在配置文件中使用

Scheduler的常用方法
添加一个定时任务:
Date scheduleJob(JobDetail jobDetail,Trigger trigger)

修改一个定时任务,主要是更改trigger:
Date rescheduleJob(String triggerName, String groupName, Trigger newTrigger)

删除一个定时任务,同时也会将于该jobDetail关联的trigger一并删除:
boolean deleteJob(String jobName,String jobGroup)

取得所有的jobDetail组
String[] getJobGroupNames() 

取得某个group下的所有的jobDetail
String[] getJobNames(String groupName)

取得指定的jobDetail
JobDetail getJobDetail(String jobName, String jobGroup)

取得指定的jobDetail的所有的Trigger
Trigger[] getTriggersOfJob(String jobName, String groupName)

取得指定的Trigger
Trigger getTrigger(String triggerName, String triggerGroup)

Quartz的存储:
Quartz默认的是使用RAM存储所有的信息,但是这样的话,当我们重启服务器后,之前的所有的定时任务就全消失了。为了让服务器重启以后,我们的定时任务仍不丢失,我们可采用数据库持久化定时任务。
首先要先建立数据库,在quartz-1.6.0\docs\dbTables下,选择自己使用的数据库的sql脚本,建立相应的数据库表。
在WEB-INF下加一个quartz.properties。我们可以在 quartz-1.6.0\examples\example10 中找到该文件的样例

 

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX #表明使用JDBC进行持久化
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_     #该值尽量不要改动,如改动,还要相应的修改sql脚本
org.quartz.jobStore.isClustered = false

org.quartz.dataSource.myDS.driver = net.sourceforge.jtds.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:jtds:sqlserver://192.168.1.101:1433/Northwind;autoReconnect=true
org.quartz.dataSource.myDS.user = sa
org.quartz.dataSource.myDS.password =
org.quartz.dataSource.myDS.maxConnections = 5


日常语义与cronTrigger的转化,以下setter,getter省略

 

java 代码
  1. public class TDateRange{   
  2.  private int startType = 2;//开始类型。默认的使用2表示使用开始日期   
  3.  private Date startDate = new Date();//开始日期   
  4.  private int endType = 0;//结束类型。0表示无结束时间;1表示重复n次后结束;2表示使用结束日期   
  5.  private Date endDate = new Date();//结束日期   
  6.  private int occurrences;//执行次数   
  7. }   
  8. public class TFrequency{   
  9.  //0:无重复提醒   
  10.  //1:每every   
  11.  //2:每个工作日detail=1,2,3,4,5   
  12.  //3:每every周后的星期detail日   
  13.  //4:每every月的detail日   
  14.  //5:每every月的第num1个星期num2   
  15.  //6:每年num1月num2日   
  16.  //7:每年every月的第num1个月的星期num2   
  17.  private int type = 0;//频率类型   
  18.  private int every = 0;   
  19.  private String detail = "";   
  20.  private String num1 = "";   
  21.  private String num2 = "";   
  22. }   
  23.   
  24. private String formatQuartzString(){   
  25.  String quartzStr = "";   
  26.  tiggernote="";   
  27.  //秒 分 时    
  28.  quartzStr = "0 "+this.dateRange.getStartDate().getMinutes()+" "+this.dateRange.getStartDate().getHours()+" ";   
  29.  switch(this.frequency.getType()){   
  30.  case 0://无重复提醒   
  31.   quartzStr += this.dateRange.getStartDate().getDate()+" "+(this.dateRange.getStartDate().getMonth()+1)+" ? "+(this.dateRange.getStartDate().getYear()+1900);   
  32.   tiggernote+="起始时间:"+quartzStr;   
  33.   break;   
  34.  case 1://每XX天提醒   
  35.   quartzStr += "*/"+this.frequency.getEvery()+" * ? ";   
  36.   tiggernote+="每"+this.frequency.getEvery()+"提醒";   
  37.   break;   
  38.  case 2://每个工作日detail=1,2,3,4,5   
  39.   //quartzStr += "? * 2-6";   
  40.   quartzStr ="0 */1 * * * ?"//测试   
  41.   tiggernote+="每个工作日1,2,3,4,5提醒";   
  42.   break;   
  43.  case 3://每every周后的星期detail日   
  44.   quartzStr += "? * "+this.frequency.getDetail()+"/"+this.frequency.getEvery();   
  45.   tiggernote+="每"+this.frequency.getEvery()+"周星期"+this.frequency.getDetail()+"日";   
  46.   break;   
  47.  case 4://每every个月的detail日   
  48.   quartzStr += this.frequency.getDetail()+" */"+this.frequency.getEvery()+" ?";   
  49.   tiggernote+="每"+this.frequency.getEvery()+"月"+this.frequency.getDetail()+"日";   
  50.   break;   
  51.  case 5://每every个月的第num1个星期num2   
  52.   quartzStr += "? */"+this.frequency.getEvery()+" "+this.frequency.getNum2();   
  53.   //星期   
  54.   if(Integer.valueOf(this.frequency.getNum1()).intValue()>0){   
  55.    quartzStr += "#"+this.frequency.getNum1();   
  56.    tiggernote+="每"+this.frequency.getEvery()+"月第"+this.frequency.getNum1()+"个星期"+this.frequency.getNum2()+"日";   
  57.   }else{   
  58.    quartzStr += "L";   
  59.    tiggernote+="每"+this.frequency.getEvery()+"月星期"+this.frequency.getNum2();   
  60.   }   
  61.   break;   
  62.  case 6://每年num1月num2日   
  63.   quartzStr += this.frequency.getNum2()+" "+this.frequency.getNum1()+" ?";   
  64.   tiggernote+="每年"+this.frequency.getNum1()+"月"+this.frequency.getNum2()+"日";   
  65.   break;   
  66.  case 7://每年every月的第num1个星期num2   
  67.   quartzStr += "? "+this.getFrequency().getEvery()+" "+this.getFrequency().getNum2();   
  68.   //星期   
  69.   if(Integer.valueOf(this.frequency.getNum1()).intValue()>0){   
  70.    quartzStr += "#"+this.frequency.getNum1();   
  71.    tiggernote+="每年"+this.getFrequency().getEvery()+"月的第"+this.frequency.getNum1()+"个星期"+this.getFrequency().getNum2()+"日";   
  72.   }else{    
  73.    quartzStr += "L";   
  74.    tiggernote+="每年"+this.getFrequency().getEvery()+"月的"+this.getFrequency().getNum2()+"日";   
  75.   }    
  76.   break;   
  77.  default :   
  78.  }   
  79.  log.debug("quartzStr="+quartzStr);   
  80.  return quartzStr;   
  81. }   
Scheduler:
Scheduler 是一个计划集,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。
在Quartz中,我们可以通过
SchedulerFactory scheduleFactory = new StdSchedulerFactory();
Scheduler scheduler = scheduleFactory.getScheduler();
来取得scheduler,通过调用scheduler.start()来启动quartz。
在spring中,org.springframework.scheduling.quartz.SchedulerFactoryBean是对Quartz的org.quartz.Scheduler的封装,通过上面的配置,在spring启动的时候,quartz就会跟随着启动,不需要再用scheduler.start()来启动。在spring中,如果要取得scheduler,可通过上面的配置文件那样,将SchedulerFactoryBean注入到schdeuler中。
分享到:
评论
14 楼 huajz 2008-07-21  
jjs_love 写道
我这里有一个java WEB程序要与vb之间进行socket通信,
我这里quartz主要是用定时任务,每5秒就做一次任务马上发消息给vb应用程序,但我在测试的时候,我项目启动时间要大于5秒,也就是说我的项目还没有完成,调度任务就开始了,怎么让它在项目启动完成之后再调度任务?

同问。
13 楼 herowzz 2008-07-02  
pragmatic 写道
因公司近期项目中有个功能需要用到定时执行任务,公司项目又是基于ssh框架的,所以自然就选用了quartz,一切弄好之后,发现有个小小的问题,每次重启weblogic,任务都会先执行一遍,而不是等待到了时间触发点再执行,比如:我设置的任务是每天12:00执行,重启服务的时候他会执行一下,然后等到12:00再执行,查了很多资料都没有这方面的介绍,不知道大家碰到过没有?


没有这样的情况啊,我们配置好就只会在时间触发点才会执行.
12 楼 jjs_love 2007-12-26  
我这里有一个java WEB程序要与vb之间进行socket通信,
我这里quartz主要是用定时任务,每5秒就做一次任务马上发消息给vb应用程序,但我在测试的时候,我项目启动时间要大于5秒,也就是说我的项目还没有完成,调度任务就开始了,怎么让它在项目启动完成之后再调度任务?
11 楼 pragmatic 2007-11-13  
因公司近期项目中有个功能需要用到定时执行任务,公司项目又是基于ssh框架的,所以自然就选用了quartz,一切弄好之后,发现有个小小的问题,每次重启weblogic,任务都会先执行一遍,而不是等待到了时间触发点再执行,比如:我设置的任务是每天12:00执行,重启服务的时候他会执行一下,然后等到12:00再执行,查了很多资料都没有这方面的介绍,不知道大家碰到过没有?
10 楼 asklxf 2007-10-10  
Quartz可以配置线程池大小,如果任务多,执行频繁,把线程池配大点就好了,只有当线程池的线程都在跑task时,才会阻塞后面的任务

pheh 写道
galaxystar 写道
在quartz中, 建议每个任务的工作量, 最好是均衡的, 因为, 我发现, 有时, 某个task very busy的时候, 其他task会阻塞.

甚至导致, 当前应用出现响应超时的现象.

部署quartz的时候, 裸体单机感觉不错.

我的项目中用quartz只是做了一个定时任务提醒功能,每个提醒任务的工作量基本上一样,就是发出邮件或是屏幕提醒之类的,没有发现你所有的问题。
P.S.quartz不是多线程的吗?怎么会出现task阻塞?没想明白,还请galaxystar详细讲讲
9 楼 hbcui1984 2007-09-29  
请问楼主:
可清楚quartz的实现机制,在哪个类里实现了时间监控?
比如:我的job一分钟执行一次,quartz是怎么知道什么时候该执行了?好像是把下次执行时间保存在了JobDataMap中,可是下一分钟到来时刻,是什么激发job执行呢?
8 楼 zhu_chen001 2007-09-04  
可惜了quartz在暂停任务后,过段时间再恢复的时候会根据停止的时间判断是否自动执行一次,导致临界任务不能控制
7 楼 y_yqing 2007-09-04  
楼主是否知道如何用CronExpression表示每个月的最后三天内某时间点触发吗?望不吝赐教

另外,对于文中“但是如果在day-of-week字段L在另一个值后面,意味着这个月的最后XXX天,比如"6L"表示这个月的最后一个星期五。”这段话,我没能理解。如果L在day-of-week段就代表是这个月的最后xxx天,为什么6L就一定代表是最后一个星期五呢?

6 楼 pheh 2007-08-30  
小弟愚钝,还是不太明白,希望楼上的能写个示例代码说明一下,如何在构造时传参来定义类型,这个参数是什么时候赋值的,是在定时触发时吗?
public class ReminderManager extends QuartzJobBean{   
private String reminderStr = "";   
}
之所以定义一个reminderStr属性,是因为spring会在定时触发时自动将值注入到reminderStr中,spring已经帮我们做好了这些工作,就不用再通过参数的形式传参了,虽然这样灵活性上会差些,但是考虑到在项目中这块的需求基本上不会变动,就采取了这种方法。
5 楼 Groovy 2007-08-30  
pheh 写道
Groovy 写道
感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢?

我对StatefulJob不太熟悉,看源代码,它是继承自Job接口的,并且也没有他自己定义的方法,应该是属于标识接口,你指的的做成一个属性来设置是什么意思呢?


这样在使用的时候需要用两个类实现分别Job和StatefulJob,我的意思是说他们既然没有什么不一样的方法,为什么不做成在构造时候传参来定义类型呢
4 楼 pheh 2007-08-30  
galaxystar 写道
在quartz中, 建议每个任务的工作量, 最好是均衡的, 因为, 我发现, 有时, 某个task very busy的时候, 其他task会阻塞.

甚至导致, 当前应用出现响应超时的现象.

部署quartz的时候, 裸体单机感觉不错.

我的项目中用quartz只是做了一个定时任务提醒功能,每个提醒任务的工作量基本上一样,就是发出邮件或是屏幕提醒之类的,没有发现你所有的问题。
P.S.quartz不是多线程的吗?怎么会出现task阻塞?没想明白,还请galaxystar详细讲讲
3 楼 pheh 2007-08-30  
Groovy 写道
感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢?

我对StatefulJob不太熟悉,看源代码,它是继承自Job接口的,并且也没有他自己定义的方法,应该是属于标识接口,你指的的做成一个属性来设置是什么意思呢?
2 楼 galaxystar 2007-08-27  
在quartz中, 建议每个任务的工作量, 最好是均衡的, 因为, 我发现, 有时, 某个task very busy的时候, 其他task会阻塞.

甚至导致, 当前应用出现响应超时的现象.

部署quartz的时候, 裸体单机感觉不错.
1 楼 Groovy 2007-08-27  
感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢?

相关推荐

    对Quartz的简单封装

    总结来说,这篇博客的作者通过封装Quartz,降低了其使用难度,提高了开发效率,同时保持了Quartz的强大功能。如果你正在寻找一种方式来管理和调度Java应用程序中的定时任务,那么学习这个封装的Quartz实现可能会对你...

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Spring整合Quartz 2.2.3是Java开发者在实现定时任务时常用的一种技术组合。Quartz是一款开源的作业调度框架,它允许程序在特定时间执行预定的任务,而Spring则是一个强大的企业级应用开发框架,提供了丰富的依赖注入...

    Quartz定时任务框架学习总结

    了解并实践以上Quartz的关键点,可以帮助你熟练地在Java应用中构建定时任务,实现对业务逻辑的自动化调度。在实际项目中,根据需求选择合适的Trigger类型,结合Job的自定义逻辑,可以实现复杂的时间控制和任务执行...

    Quartz使用总结

    ### Quartz使用总结与详解 #### 一、Quartz概述 Quartz是一个开源的任务调度框架,主要功能在于能够根据用户自定义的时间规则来触发任务执行。Quartz提供了丰富的接口供开发者进行二次开发,使得任务调度变得非常...

    Quartz总结

    【Quartz框架详解】 Quartz是一个纯Java编写的开源任务调度框架,它的主要作用是管理和执行计划任务。Quartz提供了一种高度灵活的定时任务管理机制,使得开发者能够轻松地在应用程序中设置复杂的调度策略。 **一、...

    spring quartz学习总结: cluster的配置和示例

    Spring Quartz是一款广泛使用的Java任务调度框架,用于在应用程序中安排周期性或一次性任务。Quartz集群(Cluster)是指多个Quartz实例(节点)共享相同的作业和触发器,从而实现高可用性和故障转移。本文将深入探讨...

    quartz创建表sql

    总结,创建Quartz表是部署和使用Quartz的前提,不同的数据库系统需要执行不同的SQL语句。理解这些语句的含义和功能,有助于更好地管理和维护Quartz调度服务。在实际应用中,可以根据具体需求调整表结构,比如添加...

    Android studio下的quartz工程

    总结,通过在Android Studio中集成Quartz,开发者可以方便地实现复杂的定时任务,提升应用的功能性和用户体验。通过正确配置和使用,Quartz可以成为Android应用的强大工具。不过,需要注意Android的特殊性,如主线程...

    Quartz 线程池

    总结,Quartz 线程池是实现高效、可靠任务调度的关键组件。理解其工作原理并合理配置,能够帮助我们更好地利用系统资源,提升应用的响应速度和稳定性。在开发过程中,对线程池的监控和优化是确保系统性能的重要环节...

    Quartz

    ### Java框架介绍: Quartz从入门到进阶 #### 一、Quartz简介 Quartz是一个完全由Java编写的开源作业调度框架,适用于多种Java...通过对Quartz的学习和实践,可以大大提高开发效率并为项目带来更高的稳定性和可靠性。

    quartz3种调度形式+传参.zip

    总结,Quartz的三种调度形式满足了不同场景下的定时任务需求,而与Spring的整合则进一步提升了其易用性和可维护性。了解并掌握这些知识,对于开发Java后台服务,特别是涉及到定时任务处理的项目,有着重要的实践价值...

    quartz 定时任务调度

    总结,Quartz定时任务调度是Java开发中不可或缺的工具,尤其对于需要定时执行任务的系统来说。通过学习和掌握Quartz的使用,以及cron表达式的编写,我们可以构建出强大且灵活的任务调度系统。同时,利用插件系统和...

    springboot2.0整合quartz

    总结,Spring Boot 2.0整合Quartz简化了定时任务的开发流程,使得我们可以专注于任务逻辑,而不是底层的调度配置。这得益于Spring Boot的自动配置能力以及对Quartz的良好支持。通过上述步骤,开发者可以快速地在项目...

    QuartzDemo及iis闲置时间解决方案

    总结起来,Quartz和IIS结合使用时,可能会遇到IIS闲置时间导致任务中断的问题。通过调整IIS设置、优化Quartz配置,甚至将任务调度服务迁移出IIS,我们可以确保定时任务的稳定运行。在实际应用中,应根据具体需求和...

    Quartz调度框架应用总结

    Quartz调度框架应用总结

    Quartz2.2.1基于Spring注解方式配置Quartz

    总结,通过上述步骤,我们已经成功地使用Spring注解配置了Quartz2.2.1,实现了基于注解的任务调度。这种方式简化了配置,使得任务管理和扩展更加方便。在实际开发中,可以根据项目需求调整触发规则,实现复杂的定时...

    spring boot集成quartz定时器

    1. 添加依赖:首先,你需要在Spring Boot项目的`pom.xml`或`build.gradle`文件中添加Quartz和Spring Boot对Quartz的支持。如果是Maven项目,添加以下依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    quartz-2.2.3.zip

    总结来说,"quartz-2.2.3.zip"提供的资源可以帮助我们设置和运行Quartz作业调度系统,通过"quartz-2.2.3-sql"的SQL脚本创建必要的数据库表,而"quartz-2.2.3.jar"则提供了Quartz框架的实现,使得我们可以方便地在...

    Quartz.net 3.0.7.0数据库持久化.rar

    **总结** Quartz.NET 3.0.7.0通过数据库持久化保证了任务调度的可靠性,即使在系统故障后也能恢复。同时,它的集群功能提供了高可用性和负载均衡,可以有效防止单点故障。通过C# API,开发者可以方便地创建、管理和...

    quartz集群各种数据库建表脚本

    总结起来,"quartz集群各种数据库建表脚本"是实现Quartz集群的关键组件之一,它确保了各个节点之间任务信息的一致性,从而实现高可用和容错性的目标。在部署Quartz集群时,正确地执行这些脚本是成功配置的前提。同时...

Global site tag (gtag.js) - Google Analytics