Explorar el Código

定时器优化

wuhb hace 5 meses
padre
commit
0e0fd506e2

+ 6 - 2
src/main/core/com/yw/core/clientImpl/ClientCommonAction.java

@@ -47,10 +47,14 @@ public class ClientCommonAction extends PermitDataAction {
 				String jsonData = req.getParameter("jsondata");
 				JSONObject jo = JSONObject.fromObject(jsonData);
 				LogerUtil.info("jsonData: " + jsonData);
+				if(jsonData == null){
+					out.write("参数无效");
+					return;
+				}
 				type = jo.getString("iscrypt");
 				String serviceId = jo.getString("serviceId");
 				String params = jo.getString("params");
-				LogerUtil.info("serviceId:" + serviceId +", params: " + JSONObject.fromObject(params));
+//				LogerUtil.info("serviceId:" + serviceId +", params: " + JSONObject.fromObject(params));
   				if(!StringUtil.isEmpty(serviceId) && !StringUtil.isEmpty(params)) {
 					parameters = "{\"serviceId\":\""+serviceId+"\",\"params\":"+params+"}";
 				}else {
@@ -64,7 +68,7 @@ public class ClientCommonAction extends PermitDataAction {
 				if (!"3".equals(type)) {
 					String serviceId = req.getParameter("serviceId");
 					String params = req.getParameter("params");
-					LogerUtil.info("serviceId:" + serviceId +", params: " + params);
+//					LogerUtil.info("serviceId:" + serviceId +", params: " + params);
 	  				if(!StringUtil.isEmpty(serviceId) && !StringUtil.isEmpty(params)) {
 						parameters = "{\"serviceId\":\""+serviceId+"\",\"params\":"+params+"}";
 					}else {

+ 22 - 24
src/main/core/com/yw/core/common/quartz/QuartzUtil.java

@@ -29,7 +29,7 @@ public class QuartzUtil {
 
 	/**
 	 * 更新触发器时间
-	 * @param trigeerName
+	 * @param triggerName
 	 * @param cron
 	 */
 	 public static void updateTriggerTime(String triggerName,String cron){
@@ -47,7 +47,7 @@ public class QuartzUtil {
 		    e.printStackTrace();
 		}
 		*/
-		
+
 		 /*
 		  * quartz 2.x
 		  */
@@ -67,7 +67,7 @@ public class QuartzUtil {
 	 }
  /**
   * 更新触发器时间可传参数
-  * @param trigeerName
+  * @param triggerName
   * @param cron
   * @param params
   */
@@ -90,7 +90,7 @@ public class QuartzUtil {
             e.printStackTrace();
         }
         */
-        
+
 		 /*
 		  * quartz 2.x
 		  */
@@ -102,7 +102,7 @@ public class QuartzUtil {
             CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
 			//按新的cronExpression表达式重新构建trigger
 			trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
-			
+
             JobDataMap job = new JobDataMap();
             job.putAll(params);
             job.putAll(trigger.getJobDataMap());
@@ -116,7 +116,7 @@ public class QuartzUtil {
 
 /**
  * 暂停定时任务
- * @param trigeerName
+ * @param triggerName
  * @param unitId
  */
 	 public static void pauseTriggerTime(String triggerName,String unitId){
@@ -125,13 +125,13 @@ public class QuartzUtil {
 		try {
 			Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
 			CronTrigger trigger = (CronTrigger)scheduler.getTrigger(triggerName,unitId);
-			if(trigger == null) return;	        
+			if(trigger == null) return;
 			scheduler.pauseTrigger(trigger.getName(),unitId);
 		} catch (SchedulerException e) {
 		    e.printStackTrace();
 		}
 		*/
-		 
+
 		 /*
 		  * quartz 2.x
 		  */
@@ -146,11 +146,11 @@ public class QuartzUtil {
 	 }
 /**
  * 	  更新定时任务
- * @param trigeerName
+ * @param triggerName
  * @param cron
  * @param params
  * @param unitId
- * @throws ClassNotFoundException 
+ * @throws ClassNotFoundException
  */
 	 public static void updateUnitTriggerTime(String triggerName,String cron,Map<String,Object> params,String unitId) throws ClassNotFoundException{
 		 /*
@@ -164,7 +164,7 @@ public class QuartzUtil {
             e.printStackTrace();
         }
         */
-        
+
 		 /*
 		  * quartz 2.x
 		  */
@@ -177,11 +177,10 @@ public class QuartzUtil {
             e.printStackTrace();
         }
 	 }
-	 
+
 	 /**
-	  * 启动定时任务	 
+	  * 启动定时任务
 	  * @param trigeerName
-	  * @param cron
 	  * @param params
 	  * @param unitId
 	  */
@@ -189,18 +188,17 @@ public class QuartzUtil {
  		startTriggerTime(trigeerName,null,params,unitId);
  	 }
  	 /**
-	  * 启动执行一次,再定时 
+	  * 启动执行一次,再定时
 	  * @param trigeerName
-	  * @param cron
 	  * @param params
 	  * @param unitId
 	  */
  	public static void firstTriggerTime(String trigeerName,Map<String,Object> params,String unitId){
  		startTriggerTime(trigeerName,null,params,unitId,true);
- 		
+
  	 }
 /**
- * 启动定时任务	 
+ * 启动定时任务
  * @param trigeerName
  * @param cron
  * @param params
@@ -209,7 +207,7 @@ public class QuartzUtil {
 	 public static void startTriggerTime(String trigeerName,String cron,Map<String,Object> params,String unitId){
 		 startTriggerTime(trigeerName,cron,params,unitId,false);
 	 }
-	 
+
 	 public static void startTriggerTime(String triggerName,String cron,Map<String,Object> params,String unitId,boolean isStart){
 		 /*
 		  * quartz 1.x
@@ -228,7 +226,7 @@ public class QuartzUtil {
             	return;
          	}
         	String className = trigeerMap.get(triggerName);
-        	Class clz = Class.forName(className);	
+        	Class clz = Class.forName(className);
         	if(StringUtil.isEmpty(cron)){
         		YrJob job = (YrJob)clz.newInstance();
         		cron = job.getCronExpression();
@@ -241,7 +239,7 @@ public class QuartzUtil {
 	 		}
 			scheduler = StdSchedulerFactory.getDefaultScheduler();
 			scheduler.scheduleJob(jobDetail, trigger);
-			scheduler.start();			
+			scheduler.start();
 			if(isStart){
 				updateUnitTriggerTime(triggerName,cron,params,unitId);
 			}
@@ -257,13 +255,13 @@ public class QuartzUtil {
 			e.printStackTrace();
 		}
 		*/
-		
+
 		 /*
 		  * quartz 2.x
 		  */
 		 try {
 			String className = trigeerMap.get(triggerName);
-			Class clz = Class.forName(className);	
+			Class clz = Class.forName(className);
 			if(StringUtil.isEmpty(cron)){
 				YrJob job = (YrJob)clz.newInstance();
 				cron = job.getCronExpression();
@@ -297,7 +295,7 @@ public class QuartzUtil {
 	 		}
 			scheduler = StdSchedulerFactory.getDefaultScheduler();
 			scheduler.scheduleJob(jobDetail, trigger);
-			scheduler.start();			
+			scheduler.start();
 			if(isStart){
 				updateUnitTriggerTime(triggerName,cron,params,unitId);
 			}

+ 35 - 15
src/main/core/com/yw/core/common/quartz/YrQuartz.java

@@ -5,9 +5,8 @@ import static org.quartz.CronScheduleBuilder.cronSchedule;
 import static org.quartz.JobBuilder.newJob;
 import static org.quartz.TriggerBuilder.newTrigger;
 
-import org.quartz.JobDetail;
-import org.quartz.Scheduler;
-import org.quartz.Trigger;
+import com.yw.core.utils.LogerUtil;
+import org.quartz.*;
 import org.quartz.impl.StdSchedulerFactory;
 
 import com.yw.core.utils.StringUtil;
@@ -25,28 +24,49 @@ public class YrQuartz {
 		try{
 			Class clz = Class.forName(className);
 			YrJob yrJob = (YrJob) clz.newInstance();
-			String cron = yrJob.getCronExpression();			
+			String cron = yrJob.getCronExpression();
 			if(StringUtil.isEmpty(cron)){
 				cron = defaultCron;
 			}
-//			JobDetail jobDetail = new JobDetail(clz.getName(), Scheduler.DEFAULT_GROUP,clz);
-//			CronTrigger trigger = new CronTrigger(triggerName, DEFAULT,cron);
-			
-			JobDetail jobDetail = newJob(clz).withIdentity(clz.getName(), Scheduler.DEFAULT_GROUP).build();
-			Trigger trigger = newTrigger().withIdentity(triggerName, DEFAULT).startNow()
-					.withSchedule(cronSchedule(cron)).build();
-			
 			sched = StdSchedulerFactory.getDefaultScheduler();
-			sched.scheduleJob(jobDetail, trigger);
+			scheduleJob(clz, cron, triggerName);
 			sched.start();
 		}catch(Exception ex){
-			
+			ex.printStackTrace();
+			LogerUtil.error("YrQuartz异常:", ex);
+		}
+	}
+
+	public static void scheduleJob(Class<? extends Job> clz, String cron, String triggerName)
+			throws SchedulerException {
+
+		// 创建JobDetail
+		JobDetail jobDetail = JobBuilder.newJob(clz)
+				.withIdentity(clz.getName(), Scheduler.DEFAULT_GROUP)
+				.storeDurably()  // 持久化存储
+				.build();
+
+		// 创建带失火策略的Trigger
+		Trigger trigger = TriggerBuilder.newTrigger()
+				.withIdentity(triggerName, Scheduler.DEFAULT_GROUP)
+				.withSchedule(CronScheduleBuilder.cronSchedule(cron)
+						.withMisfireHandlingInstructionFireAndProceed()  // 关键配置
+				)
+				.forJob(jobDetail)
+				.build();
+
+		// 检查作业是否已存在
+		if (!sched.checkExists(jobDetail.getKey())) {
+			sched.scheduleJob(jobDetail, trigger);
+		} else {
+			// 如果已存在,重新安排触发器
+			sched.rescheduleJob(trigger.getKey(), trigger);
 		}
 	}
-	 
+
 	// 停止
 	public static void stop() throws Exception {
 		sched.shutdown();
 	}
-	
+
 }