Kaynağa Gözat

文件操作优化

xuxueli 8 yıl önce
ebeveyn
işleme
bf86698416

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java Dosyayı Görüntüle

@@ -59,7 +59,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
59 59
 
60 60
     @Override
61 61
     public ReturnT<LogResult> log(long logDateTim, int logId, int fromLineNum) {
62
-        // log filename: yyyy-MM-dd/9999.log
62
+        // log filename: logPath/yyyy-MM-dd/9999.log
63 63
         String logFileName = XxlJobFileAppender.makeLogFileName(new Date(logDateTim), logId);
64 64
 
65 65
         LogResult logResult = XxlJobFileAppender.readLog(logFileName, fromLineNum);

+ 27 - 6
xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java Dosyayı Görüntüle

@@ -5,20 +5,40 @@ package com.xxl.job.core.glue;
5 5
  */
6 6
 public enum GlueTypeEnum {
7 7
 
8
-    BEAN("BEAN模式"),
9
-    GLUE_GROOVY("GLUE模式(Java)"),
10
-    GLUE_SHELL("GLUE模式(Shell)"),
11
-    GLUE_PYTHON("GLUE模式(Python)"),
12
-    GLUE_NODEJS("GLUE模式(Nodejs)");
8
+    BEAN("BEAN模式", false, null, null),
9
+    GLUE_GROOVY("GLUE模式(Java)", false, null, null),
10
+    GLUE_SHELL("GLUE模式(Shell)", true, "bash", ".sh"),
11
+    GLUE_PYTHON("GLUE模式(Python)", true, "python", ".py"),
12
+    GLUE_NODEJS("GLUE模式(Nodejs)", true, "node", ".js");
13 13
 
14 14
     private String desc;
15
-    private GlueTypeEnum(String desc) {
15
+    private boolean isScript;
16
+    private String cmd;
17
+    private String suffix;
18
+
19
+    private GlueTypeEnum(String desc, boolean isScript, String cmd, String suffix) {
16 20
         this.desc = desc;
21
+        this.isScript = isScript;
22
+        this.cmd = cmd;
23
+        this.suffix = suffix;
17 24
     }
25
+
18 26
     public String getDesc() {
19 27
         return desc;
20 28
     }
21 29
 
30
+    public boolean isScript() {
31
+        return isScript;
32
+    }
33
+
34
+    public String getCmd() {
35
+        return cmd;
36
+    }
37
+
38
+    public String getSuffix() {
39
+        return suffix;
40
+    }
41
+
22 42
     public static GlueTypeEnum match(String name){
23 43
         for (GlueTypeEnum item: GlueTypeEnum.values()) {
24 44
             if (item.name().equals(name)) {
@@ -27,4 +47,5 @@ public enum GlueTypeEnum {
27 47
         }
28 48
         return null;
29 49
     }
50
+
30 51
 }

+ 12 - 13
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java Dosyayı Görüntüle

@@ -31,25 +31,24 @@ public class ScriptJobHandler extends IJobHandler {
31 31
     @Override
32 32
     public ReturnT<String> execute(String... params) throws Exception {
33 33
 
34
-        // cmd + script-file-name
35
-        String cmd = "bash";
36
-        String scriptFileName = null;
37
-        if (GlueTypeEnum.GLUE_SHELL == glueType) {
38
-            cmd = "bash";
39
-            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh");
40
-        } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
41
-            cmd = "python";
42
-            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py");
43
-        } else if (GlueTypeEnum.GLUE_NODEJS == glueType) {
44
-            cmd = "node";
45
-            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".js");
34
+        if (!glueType.isScript()) {
35
+            return new ReturnT<String>(IJobHandler.FAIL.getCode(), "glueType["+ glueType +"] invalid.");
46 36
         }
47 37
 
38
+        // cmd
39
+        String cmd = glueType.getCmd();
40
+
48 41
         // make script file
42
+        String scriptFileName = XxlJobFileAppender.getLogPath()
43
+                .concat("/gluesource/")
44
+                .concat(String.valueOf(jobId))
45
+                .concat("_")
46
+                .concat(String.valueOf(glueUpdatetime))
47
+                .concat(glueType.getSuffix());
49 48
         ScriptUtil.markScriptFile(scriptFileName, gluesource);
50 49
 
51 50
         // log file
52
-        String logFileName = XxlJobFileAppender.getLogPath().concat(XxlJobFileAppender.contextHolder.get());
51
+        String logFileName = XxlJobFileAppender.contextHolder.get();
53 52
 
54 53
         // invoke
55 54
         XxlJobLogger.log("----------- script file:"+ scriptFileName +" -----------");

+ 29 - 35
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java Dosyayı Görüntüle

@@ -20,53 +20,47 @@ public class XxlJobFileAppender {
20 20
 	public static final InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
21 21
 
22 22
 
23
-	private static String logPath = "/data/applogs/xxl-job/jobhandler/";
23
+	// log base path
24
+	private static String logBasePath = "/data/applogs/xxl-job/jobhandler";
24 25
 	public static void initLogPath(String logPath){
25 26
 		// init
26 27
 		if (logPath!=null && logPath.trim().length()>0) {
27
-			/*if (!logPath.endsWith("/")) {
28
-				logPath = logPath.concat("/");
29
-			}*/
30
-			XxlJobFileAppender.logPath = logPath;
28
+			logBasePath = logPath;
31 29
 		}
32
-		// mk dir
33
-		File logPathDir = new File(XxlJobFileAppender.logPath);
30
+		// mk base dir
31
+		File logPathDir = new File(logBasePath);
34 32
 		if (!logPathDir.exists()) {
35 33
 			logPathDir.mkdirs();
36 34
 		}
37
-		XxlJobFileAppender.logPath = logPathDir.getPath();
35
+		logBasePath = logPathDir.getPath();
36
+
37
+		// mk glue dir
38
+		File glueBaseDir = new File(logPathDir, "gluesource");
39
+		if (!glueBaseDir.exists()) {
40
+			glueBaseDir.mkdirs();
41
+		}
38 42
 	}
39 43
 	public static String getLogPath() {
40
-		return logPath;
44
+		return logBasePath;
41 45
 	}
42 46
 
43 47
 
44 48
 	/**
45
-	 * log filename: yyyy-MM-dd/9999.log
49
+	 * log filename, like "logPath/yyyy-MM-dd/9999.log"
46 50
 	 *
47 51
 	 * @param triggerDate
48 52
 	 * @param logId
49 53
 	 * @return
50 54
 	 */
51 55
 	public static String makeLogFileName(Date triggerDate, int logId) {
52
-
53
-        // filePath/
54
-        File filePathDir = new File(logPath);
55
-        if (!filePathDir.exists()) {
56
-            filePathDir.mkdirs();
57
-        }
58
-
59
-        // filePath/yyyy-MM-dd/
56
+		// filePath/yyyy-MM-dd/9999.log
60 57
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
61
-
62
-        String nowFormat = sdf.format(new Date());
63
-        File filePathDateDir = new File(filePathDir, nowFormat);
64
-        if (!filePathDateDir.exists()) {
65
-            filePathDateDir.mkdirs();
66
-        }
67
-
68
-        // filePath/yyyy-MM-dd/9999.log
69
-		String logFileName = sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
58
+		String logFileName = getLogPath()
59
+				.concat("/")
60
+				.concat(sdf.format(triggerDate))
61
+				.concat("/")
62
+				.concat(String.valueOf(logId))
63
+				.concat(".log");
70 64
 		return logFileName;
71 65
 	}
72 66
 
@@ -78,17 +72,11 @@ public class XxlJobFileAppender {
78 72
 	 */
79 73
 	public static void appendLog(String logFileName, String appendLog) {
80 74
 
81
-		// log
82
-		if (appendLog == null) {
83
-			appendLog = "";
84
-		}
85
-		appendLog += "\r\n";
86
-
87 75
 		// log file
88 76
 		if (logFileName==null || logFileName.trim().length()==0) {
89 77
 			return;
90 78
 		}
91
-		File logFile = new File(logPath, logFileName);
79
+		File logFile = new File(logFileName);
92 80
 
93 81
 		if (!logFile.exists()) {
94 82
 			try {
@@ -98,6 +86,12 @@ public class XxlJobFileAppender {
98 86
 				return;
99 87
 			}
100 88
 		}
89
+
90
+		// log
91
+		if (appendLog == null) {
92
+			appendLog = "";
93
+		}
94
+		appendLog += "\r\n";
101 95
 		
102 96
 		// append file content
103 97
 		try {
@@ -133,7 +127,7 @@ public class XxlJobFileAppender {
133 127
 		if (logFileName==null || logFileName.trim().length()==0) {
134 128
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not found", true);
135 129
 		}
136
-		File logFile = new File(logPath, logFileName);
130
+		File logFile = new File(logFileName);
137 131
 
138 132
 		if (!logFile.exists()) {
139 133
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true);

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java Dosyayı Görüntüle

@@ -111,7 +111,7 @@ public class JobThread extends Thread{
111 111
 							? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(",")).toArray()) : null;
112 112
 
113 113
 
114
-					// log filename: yyyy-MM-dd/9999.log
114
+					// log filename, like "logPath/yyyy-MM-dd/9999.log"
115 115
 					String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
116 116
 					XxlJobFileAppender.contextHolder.set(logFileName);
117 117
 					ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));

+ 0 - 14
xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java Dosyayı Görüntüle

@@ -1,11 +1,9 @@
1 1
 package com.xxl.job.core.util;
2 2
 
3
-import com.xxl.job.core.log.XxlJobFileAppender;
4 3
 import org.apache.commons.exec.CommandLine;
5 4
 import org.apache.commons.exec.DefaultExecutor;
6 5
 import org.apache.commons.exec.PumpStreamHandler;
7 6
 
8
-import java.io.File;
9 7
 import java.io.FileOutputStream;
10 8
 import java.io.IOException;
11 9
 
@@ -27,18 +25,6 @@ public class ScriptUtil {
27 25
      * @throws IOException
28 26
      */
29 27
     public static void markScriptFile(String scriptFileName, String content) throws IOException {
30
-        // filePath/
31
-        File filePathDir = new File(XxlJobFileAppender.getLogPath());
32
-        if (!filePathDir.exists()) {
33
-            filePathDir.mkdirs();
34
-        }
35
-
36
-        // filePath/gluesource/
37
-        File filePathSourceDir = new File(filePathDir, "gluesource");
38
-        if (!filePathSourceDir.exists()) {
39
-            filePathSourceDir.mkdirs();
40
-        }
41
-
42 28
         // make file,   filePath/gluesource/666-123456789.py
43 29
         FileOutputStream fileOutputStream = null;
44 30
         try {

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties Dosyayı Görüntüle

@@ -7,7 +7,7 @@ xxl.job.executor.ip=
7 7
 xxl.job.executor.port=9997
8 8
 
9 9
 ### xxl-job log path
10
-xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/
10
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
11 11
 
12 12
 ### xxl-job, access token
13 13
 xxl.job.accessToken=

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties Dosyayı Görüntüle

@@ -7,7 +7,7 @@ xxl.job.executor.ip=
7 7
 xxl.job.executor.port=9999
8 8
 
9 9
 ### xxl-job log path
10
-xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/
10
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
11 11
 
12 12
 ### xxl-job, access token
13 13
 xxl.job.accessToken=

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties Dosyayı Görüntüle

@@ -14,7 +14,7 @@ xxl.job.executor.ip=
14 14
 xxl.job.executor.port=-1
15 15
 
16 16
 ### xxl-job log path
17
-xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/
17
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
18 18
 
19 19
 ### xxl-job, access token
20 20
 xxl.job.accessToken=