浏览代码

1、调度重启后,取消补偿遗失调度;

xueli.xue 10 年前
父节点
当前提交
51bfaa4131

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/core/util/DynamicSchedulerUtil.java 查看文件

104
             return false;
104
             return false;
105
         }
105
         }
106
         
106
         
107
-        // CronTrigger : TriggerKey + cronExpression
108
-        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
107
+        // CronTrigger : TriggerKey + cronExpression	// withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度
108
+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
109
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
109
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
110
 
110
 
111
         // JobDetail : jobClass
111
         // JobDetail : jobClass
131
         boolean result = false;
131
         boolean result = false;
132
         if (scheduler.checkExists(triggerKey)) {
132
         if (scheduler.checkExists(triggerKey)) {
133
             // CronTrigger : TriggerKey + cronExpression
133
             // CronTrigger : TriggerKey + cronExpression
134
-            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
134
+            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
135
             CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
135
             CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
136
             
136
             
137
             Date date = scheduler.rescheduleJob(triggerKey, cronTrigger);
137
             Date date = scheduler.rescheduleJob(triggerKey, cronTrigger);

+ 2 - 1
xxl-job-admin/src/main/resources/applicationcontext-trigger-db.xml 查看文件

11
 
11
 
12
 	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
12
 	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
13
 		<property name="dataSource" ref="dataSource" />
13
 		<property name="dataSource" ref="dataSource" />
14
-        <property name="autoStartup" value="true" />
14
+        <property name="autoStartup" value="true" />	<!--自动启动 -->
15
+        <property name="startupDelay" value="20" />		<!--延时启动 -->
15
 		<property name="applicationContextSchedulerContextKey"  value="applicationContextKey" /> 
16
 		<property name="applicationContextSchedulerContextKey"  value="applicationContextKey" /> 
16
         <property name="configLocation" value="classpath:quartz.properties"/>
17
         <property name="configLocation" value="classpath:quartz.properties"/>
17
 	</bean>
18
 	</bean>

+ 10 - 0
xxl-job-simple/src/main/java/com/xxl/job/service/job/DemoJobBean.java 查看文件

3
 import java.util.HashMap;
3
 import java.util.HashMap;
4
 import java.util.Map;
4
 import java.util.Map;
5
 import java.util.Map.Entry;
5
 import java.util.Map.Entry;
6
+import java.util.concurrent.TimeUnit;
6
 
7
 
8
+import org.quartz.DisallowConcurrentExecution;
7
 import org.quartz.JobExecutionContext;
9
 import org.quartz.JobExecutionContext;
8
 import org.quartz.JobExecutionException;
10
 import org.quartz.JobExecutionException;
9
 import org.slf4j.Logger;
11
 import org.slf4j.Logger;
14
  * http job bean
16
  * http job bean
15
  * @author xuxueli 2015-12-17 18:20:34
17
  * @author xuxueli 2015-12-17 18:20:34
16
  */
18
  */
19
+
20
+@DisallowConcurrentExecution	// 取消并发执行;线程数要多配置几个,否则不生效;
17
 public class DemoJobBean extends QuartzJobBean {
21
 public class DemoJobBean extends QuartzJobBean {
18
 	private static Logger logger = LoggerFactory.getLogger(DemoJobBean.class);
22
 	private static Logger logger = LoggerFactory.getLogger(DemoJobBean.class);
19
 
23
 
33
 			}
37
 			}
34
 		}
38
 		}
35
 		
39
 		
40
+		try {
41
+			TimeUnit.SECONDS.sleep(5);
42
+		} catch (InterruptedException e) {
43
+			e.printStackTrace();
44
+		}
45
+		
36
 		logger.info(">>>>>>>>>>> xxl-job run :jobId:{}, group:{}, jobDataMap:{}", 
46
 		logger.info(">>>>>>>>>>> xxl-job run :jobId:{}, group:{}, jobDataMap:{}", 
37
 				new Object[]{triggerKey, triggerGroup, jobDataMap});
47
 				new Object[]{triggerKey, triggerGroup, jobDataMap});
38
     }
48
     }