Ver Fonte

修复Log路径生成异常问题;
新增JobKey处理工具;

xuxueli há 7 anos atrás
pai
commit
9325afea08

+ 21 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/JobKeyUtil.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.util;
 
 import com.xxl.job.admin.core.model.XxlJobInfo;
+import org.apache.commons.lang.StringUtils;
 
 /**
  * job key util
@@ -20,4 +21,24 @@ public class JobKeyUtil {
                 .concat("_").concat(String.valueOf(xxlJobInfo.getId()));
     }
 
+    /**
+     * parse jobId from JobKey
+     *
+     * @param jobKey
+     * @return
+     */
+    public static int parseJobId(String jobKey){
+        if (jobKey!=null && jobKey.trim().length()>0) {
+            String[] jobKeyArr = jobKey.split("_");
+            if (jobKeyArr.length == 2) {
+                String jobIdStr = jobKeyArr[1];
+                if (StringUtils.isNotBlank(jobIdStr) && StringUtils.isNumeric(jobIdStr)) {
+                    int jobId = Integer.valueOf(jobIdStr);
+                    return jobId;
+                }
+            }
+        }
+        return -1;
+    }
+
 }

+ 4 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java

@@ -5,6 +5,7 @@ import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
 import com.xxl.job.admin.core.trigger.XxlJobTrigger;
+import com.xxl.job.admin.core.util.JobKeyUtil;
 import com.xxl.job.admin.dao.XxlJobInfoDao;
 import com.xxl.job.admin.dao.XxlJobLogDao;
 import com.xxl.job.admin.dao.XxlJobRegistryDao;
@@ -72,9 +73,9 @@ public class AdminBizImpl implements AdminBiz {
 
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
                 for (int i = 0; i < childJobKeys.length; i++) {
-                    String[] jobKeyArr = childJobKeys[i].split("_");
-                    if (jobKeyArr!=null && jobKeyArr.length==2) {
-                        ReturnT<String> triggerChildResult = xxlJobService.triggerJob(Integer.valueOf(jobKeyArr[1]));
+                    int childJobId = JobKeyUtil.parseJobId(childJobKeys[i]);
+                    if (childJobId > 0) {
+                        ReturnT<String> triggerChildResult = xxlJobService.triggerJob(childJobId);
 
                         // add msg
                         callbackMsg += MessageFormat.format("{0}/{1} [JobKey={2}], 触发{3}, 触发备注: {4} <br>",

+ 7 - 6
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java

@@ -5,6 +5,7 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
+import com.xxl.job.admin.core.util.JobKeyUtil;
 import com.xxl.job.admin.dao.XxlJobGroupDao;
 import com.xxl.job.admin.dao.XxlJobInfoDao;
 import com.xxl.job.admin.dao.XxlJobLogDao;
@@ -107,11 +108,11 @@ public class XxlJobServiceImpl implements XxlJobService {
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
 			for (String childJobKeyItem: childJobKeys) {
-				String[] childJobKeyArr = childJobKeyItem.split("_");
-				if (childJobKeyArr.length!=2) {
+				int childJobId = JobKeyUtil.parseJobId(childJobKeyItem);
+				if (childJobId <= 0) {
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
 				}
-				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
+				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(childJobId);
 				if (childJobInfo==null) {
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
 				}
@@ -170,11 +171,11 @@ public class XxlJobServiceImpl implements XxlJobService {
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
 			for (String childJobKeyItem: childJobKeys) {
-				String[] childJobKeyArr = childJobKeyItem.split("_");
-				if (childJobKeyArr.length!=2) {
+				int childJobId = JobKeyUtil.parseJobId(childJobKeyItem);
+				if (childJobId <= 0) {
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
 				}
-                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
+                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(childJobId);
 				if (childJobInfo==null) {
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
 				}

+ 9 - 4
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java

@@ -53,11 +53,16 @@ public class XxlJobFileAppender {
 	 * @return
 	 */
 	public static String makeLogFileName(Date triggerDate, int logId) {
-		// filePath/yyyy-MM-dd/9999.log
+
+		// filePath/yyyy-MM-dd
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
-		String logFileName = getLogPath()
-				.concat("/")
-				.concat(sdf.format(triggerDate))
+		File logFilePath = new File(getLogPath(), sdf.format(triggerDate));
+		if (!logFilePath.exists()) {
+			logFilePath.mkdir();
+		}
+
+		// filePath/yyyy-MM-dd/9999.log
+		String logFileName = logFilePath.getPath()
 				.concat("/")
 				.concat(String.valueOf(logId))
 				.concat(".log");