|
@@ -8,7 +8,6 @@ import com.xxl.job.core.executor.XxlJobExecutor;
|
|
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
|
|
import com.xxl.job.core.log.XxlJobLogger;
|
|
|
import com.xxl.job.core.util.FileUtil;
|
|
|
-import com.xxl.job.core.util.JacksonUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
@@ -190,46 +189,53 @@ public class TriggerCallbackThread {
|
|
|
|
|
|
// ---------------------- fail-callback file ----------------------
|
|
|
|
|
|
- private static String failCallbackFileName = XxlJobFileAppender.getLogPath().concat(File.separator).concat("xxl-job-callback").concat(".log");
|
|
|
+ private static String failCallbackFilePath = XxlJobFileAppender.getLogPath().concat(File.separator);
|
|
|
+ private static String failCallbackFileName = failCallbackFilePath.concat("xxl-job-callback-{x}").concat(".log");
|
|
|
|
|
|
private void appendFailCallbackFile(List<HandleCallbackParam> callbackParamList){
|
|
|
+ // valid
|
|
|
+ if (callbackParamList==null || callbackParamList.size()==0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// append file
|
|
|
- String content = JacksonUtil.writeValueAsString(callbackParamList);
|
|
|
- FileUtil.appendFileLine(failCallbackFileName, content);
|
|
|
+ byte[] callbackParamList_bytes = XxlJobExecutor.getSerializer().serialize(callbackParamList);
|
|
|
+
|
|
|
+ File callbackLogFile = new File(failCallbackFileName.replace("{x}", String.valueOf(System.currentTimeMillis())));
|
|
|
+ if (callbackLogFile.exists()) {
|
|
|
+ for (int i = 0; i < 100; i++) {
|
|
|
+ callbackLogFile = new File(failCallbackFileName.replace("{x}", String.valueOf(System.currentTimeMillis()).concat("-").concat(String.valueOf(i)) ));
|
|
|
+ if (!callbackLogFile.exists()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ FileUtil.writeFileContent(callbackLogFile, callbackParamList_bytes);
|
|
|
}
|
|
|
|
|
|
private void retryFailCallbackFile(){
|
|
|
|
|
|
- // load and clear file
|
|
|
- List<String> fileLines = FileUtil.loadFileLines(failCallbackFileName);
|
|
|
- FileUtil.deleteFile(failCallbackFileName);
|
|
|
-
|
|
|
- // parse
|
|
|
- List<HandleCallbackParam> failCallbackParamList = new ArrayList<>();
|
|
|
- if (fileLines!=null && fileLines.size()>0) {
|
|
|
- for (String line: fileLines) {
|
|
|
- List<HandleCallbackParam> failCallbackParamListTmp = JacksonUtil.readValue(line, List.class, HandleCallbackParam.class);
|
|
|
- if (failCallbackParamListTmp!=null && failCallbackParamListTmp.size()>0) {
|
|
|
- failCallbackParamList.addAll(failCallbackParamListTmp);
|
|
|
- }
|
|
|
- }
|
|
|
+ // valid
|
|
|
+ File callbackLogPath = new File(failCallbackFilePath);
|
|
|
+ if (!callbackLogPath.exists()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (callbackLogPath.isFile()) {
|
|
|
+ callbackLogPath.delete();
|
|
|
+ }
|
|
|
+ if (!(callbackLogPath.isDirectory() && callbackLogPath.list()!=null && callbackLogPath.list().length>0)) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- // retry callback, 100 lines per page
|
|
|
- if (failCallbackParamList!=null && failCallbackParamList.size()>0) {
|
|
|
- int pagesize = 100;
|
|
|
- List<HandleCallbackParam> pageData = new ArrayList<>();
|
|
|
- for (int i = 0; i < failCallbackParamList.size(); i++) {
|
|
|
- pageData.add(failCallbackParamList.get(i));
|
|
|
- if (i>0 && i%pagesize == 0) {
|
|
|
- doCallback(pageData);
|
|
|
- pageData.clear();
|
|
|
- }
|
|
|
- }
|
|
|
- if (pageData.size() > 0) {
|
|
|
- doCallback(pageData);
|
|
|
- }
|
|
|
+ // load and clear file, retry
|
|
|
+ for (File callbaclLogFile: callbackLogPath.listFiles()) {
|
|
|
+ byte[] callbackParamList_bytes = FileUtil.readFileContent(callbaclLogFile);
|
|
|
+ List<HandleCallbackParam> callbackParamList = (List<HandleCallbackParam>) XxlJobExecutor.getSerializer().deserialize(callbackParamList_bytes, HandleCallbackParam.class);
|
|
|
+
|
|
|
+ callbaclLogFile.delete();
|
|
|
+ doCallback(callbackParamList);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|