// durable, 指明任务就算没有绑定Trigger仍保留在Quartz的JobStore中,
jobDetail.setDurable(true)
// 加入一个任务到Quartz框架中, 等待后面再绑定Trigger,
// 此接口中的JobDetail的durable必须为true
scheduler.addJob(jobDetail, false)
Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY)
// 使用scheduleJob(Trigger)加入的Trigger必须指明JobName与JobGroup
trigger3.setJobName(jobName)
trigger3.setJobGroup(jobGroup)
scheduler.scheduleJob(trigger3)// 看这里
Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY)
trigger4.setJobName(jobName)
trigger4.setJobGroup(jobGroup)
scheduler.scheduleJob(trigger4)// 看这里
A2:
Java代码
JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass())
Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY)
Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY)
// 下面这个接口其实可以理解为先addJob(JobDetail, false)
// 再调用scheduleJob(Trigger), 此时Quartz会自动校正与设置trigger3的JobName与JobGroup属性
scheduler.scheduleJob(jobDetail, trigger3)
// 因为任务已在上一条语句中已加入, 所以不能再使用scheduleJob(JobDetail, Trigger)
trigger4.setJobName(jobName)
trigger4.setJobGroup(jobGroup)
scheduler.scheduleJob(trigger4)// 看这里
[/list]
总结:
每个任务JobDetail可以绑定多个Trigger,但一个Trigger只能绑定一个任务,这种绑定关系由四种接口来执行:
[list]
[*]1,
Java代码
Scheduler#scheduleJob(JobDetail, Trigger)
该接口的作用是在将任务加入Quartz的同时绑定一个Trigger,Quartz会在加入该任务后自动设置Trigger的JobName与JobGroup为该JobDetail的name与group;
[*]2,
Java代码
Scheduler#scheduleJob(Trigger)
该接口的作用是将该Trigger绑定到其JobName与JobGroup指向的任务JobDetail。这时的name与group需要在Trigger绑定前由Quartz的使用者来设置与调用
[*]3,
Java代码
Scheduler#rescheduleJob(String, String, Trigger)
替换一个指定的Trigger, 即解除指定Trigger与任务的绑定,并将新的Trigger与任务绑定,Quartz会自动调整新Trigger的JobName与JobGroup,而旧的Trigger将被移除
[*]4,
Java代码
Scheduler#triggerJob(String, String)
系列
创建一个立即触发的Trigger,并将其与name与group指定的任务绑定
[/list]
JobDetail有个属性叫durable,表明该任务没有任何trigger绑定时仍保存在Quartz的JobStore中,默认为false。
若JobDetail的durable属性为false,则任务将会从Quartz移除。
spring 4.x没有配置过,这里有一个spring 3.x 的quartz定时配置,你参考参考:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!--
1 、JobDetail:JobDetail是一个具体的类。
2、Trigger:触发器,它用于定义Job何时执行。最常用的是SimpleTrigger和CronTrigger。
一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么SimpleTrigger比较合适;
如果你有许多复杂的作业调度,那么CronTrigger比较合适。
CronTrigger和 Unix的cron机制基本一样,我们需要的只是一个cron表达式。
比如“0 0 12 * * ?”会在每天中午12点触发执行;“0 15 10 ? * 6L”会在每个月的最后一个星期五的早上10:15触发Job执行。
3、 Scheduler和 SchedulerFactory:Scheduler负责管理 Trigger、调度 Job,
SchedulerFactory则是Scheduler工厂,负责生成Scheduler。
-->
<!-- 总管理类如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<!-- 通过applicationContextSchedulerContextKey属性配置spring上下文 [此属性可省略] -->
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
<property name="triggers">
<list>
<!--作业调度器,list下可加入其他的调度器-->
<ref bean="testTrigger" />
</list>
</property>
<property name="autoStartup" value="true" />
</bean>
<!--要调度的对象-->
<bean id="testJob" class="name.zealze.test.JobTest" />
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="testJobDetail" />
<!-- 按cron表达式时间点触发事件 http://cron.qqe2.com/ -->
<property name="cronExpression" value="0 0/2 * * * ?" />
</bean>
<bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testJob" />
<property name="targetMethod" value="execute" />
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="false" />
</bean>
</beans>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)