Browse Source

修复Log路径生成异常问题;

xuxueli 8 years ago
parent
commit
9325afea08

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

1
 package com.xxl.job.admin.core.util;
1
 package com.xxl.job.admin.core.util;
2
 
2
 
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
+import org.apache.commons.lang.StringUtils;
4
 
5
 
5
 /**
6
 /**
6
  * job key util
7
  * job key util
20
                 .concat("_").concat(String.valueOf(xxlJobInfo.getId()));
21
                 .concat("_").concat(String.valueOf(xxlJobInfo.getId()));
21
     }
22
     }
22
 
23
 
24
+    /**
25
+     * parse jobId from JobKey
26
+     *
27
+     * @param jobKey
28
+     * @return
29
+     */
30
+    public static int parseJobId(String jobKey){
31
+        if (jobKey!=null && jobKey.trim().length()>0) {
32
+            String[] jobKeyArr = jobKey.split("_");
33
+            if (jobKeyArr.length == 2) {
34
+                String jobIdStr = jobKeyArr[1];
35
+                if (StringUtils.isNotBlank(jobIdStr) && StringUtils.isNumeric(jobIdStr)) {
36
+                    int jobId = Integer.valueOf(jobIdStr);
37
+                    return jobId;
38
+                }
39
+            }
40
+        }
41
+        return -1;
42
+    }
43
+
23
 }
44
 }

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

5
 import com.xxl.job.admin.core.model.XxlJobLog;
5
 import com.xxl.job.admin.core.model.XxlJobLog;
6
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
6
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
7
 import com.xxl.job.admin.core.trigger.XxlJobTrigger;
7
 import com.xxl.job.admin.core.trigger.XxlJobTrigger;
8
+import com.xxl.job.admin.core.util.JobKeyUtil;
8
 import com.xxl.job.admin.dao.XxlJobInfoDao;
9
 import com.xxl.job.admin.dao.XxlJobInfoDao;
9
 import com.xxl.job.admin.dao.XxlJobLogDao;
10
 import com.xxl.job.admin.dao.XxlJobLogDao;
10
 import com.xxl.job.admin.dao.XxlJobRegistryDao;
11
 import com.xxl.job.admin.dao.XxlJobRegistryDao;
72
 
73
 
73
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
74
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
74
                 for (int i = 0; i < childJobKeys.length; i++) {
75
                 for (int i = 0; i < childJobKeys.length; i++) {
75
-                    String[] jobKeyArr = childJobKeys[i].split("_");
76
-                    if (jobKeyArr!=null && jobKeyArr.length==2) {
77
-                        ReturnT<String> triggerChildResult = xxlJobService.triggerJob(Integer.valueOf(jobKeyArr[1]));
76
+                    int childJobId = JobKeyUtil.parseJobId(childJobKeys[i]);
77
+                    if (childJobId > 0) {
78
+                        ReturnT<String> triggerChildResult = xxlJobService.triggerJob(childJobId);
78
 
79
 
79
                         // add msg
80
                         // add msg
80
                         callbackMsg += MessageFormat.format("{0}/{1} [JobKey={2}], 触发{3}, 触发备注: {4} <br>",
81
                         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 View File

5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
6
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
7
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
7
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
8
+import com.xxl.job.admin.core.util.JobKeyUtil;
8
 import com.xxl.job.admin.dao.XxlJobGroupDao;
9
 import com.xxl.job.admin.dao.XxlJobGroupDao;
9
 import com.xxl.job.admin.dao.XxlJobInfoDao;
10
 import com.xxl.job.admin.dao.XxlJobInfoDao;
10
 import com.xxl.job.admin.dao.XxlJobLogDao;
11
 import com.xxl.job.admin.dao.XxlJobLogDao;
107
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
108
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
108
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
109
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
109
 			for (String childJobKeyItem: childJobKeys) {
110
 			for (String childJobKeyItem: childJobKeys) {
110
-				String[] childJobKeyArr = childJobKeyItem.split("_");
111
-				if (childJobKeyArr.length!=2) {
111
+				int childJobId = JobKeyUtil.parseJobId(childJobKeyItem);
112
+				if (childJobId <= 0) {
112
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
113
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
113
 				}
114
 				}
114
-				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
115
+				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(childJobId);
115
 				if (childJobInfo==null) {
116
 				if (childJobInfo==null) {
116
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
117
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
117
 				}
118
 				}
170
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
171
 		if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) {
171
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
172
 			String[] childJobKeys = jobInfo.getChildJobKey().split(",");
172
 			for (String childJobKeyItem: childJobKeys) {
173
 			for (String childJobKeyItem: childJobKeys) {
173
-				String[] childJobKeyArr = childJobKeyItem.split("_");
174
-				if (childJobKeyArr.length!=2) {
174
+				int childJobId = JobKeyUtil.parseJobId(childJobKeyItem);
175
+				if (childJobId <= 0) {
175
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
176
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
176
 				}
177
 				}
177
-                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
178
+                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(childJobId);
178
 				if (childJobInfo==null) {
179
 				if (childJobInfo==null) {
179
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
180
 					return new ReturnT<String>(ReturnT.FAIL_CODE, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
180
 				}
181
 				}

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

53
 	 * @return
53
 	 * @return
54
 	 */
54
 	 */
55
 	public static String makeLogFileName(Date triggerDate, int logId) {
55
 	public static String makeLogFileName(Date triggerDate, int logId) {
56
-		// filePath/yyyy-MM-dd/9999.log
56
+
57
+		// filePath/yyyy-MM-dd
57
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
58
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
58
-		String logFileName = getLogPath()
59
-				.concat("/")
60
-				.concat(sdf.format(triggerDate))
59
+		File logFilePath = new File(getLogPath(), sdf.format(triggerDate));
60
+		if (!logFilePath.exists()) {
61
+			logFilePath.mkdir();
62
+		}
63
+
64
+		// filePath/yyyy-MM-dd/9999.log
65
+		String logFileName = logFilePath.getPath()
61
 				.concat("/")
66
 				.concat("/")
62
 				.concat(String.valueOf(logId))
67
 				.concat(String.valueOf(logId))
63
 				.concat(".log");
68
 				.concat(".log");