xuxueli 7 år sedan
förälder
incheckning
029433c351

+ 10 - 9
doc/XXL-JOB官方文档.md

@@ -998,15 +998,16 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
 - 11、统一maven依赖版本管理;
 
 ### 6.18 版本 V1.8.2 特性[Coding]
-- 1、解决执行器回调URL不支持配置HTTPS时问题;
-- 2、规范项目目录,方便扩展多执行器;
-- 3、新增JFinal类型执行器sample示例项目;
-- 4、执行器手动设置IP时将会绑定Host;
-- 5、项目主页搭建,提供中英文文档(http://www.xuxueli.com/xxl-job);
-- 6、执行器回调线程销毁前, 批量回调队列中数据,防止任务结果丢失;
-- 7、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
-- 8、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
-- 9、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
+- 1、项目主页搭建:提供中英文文档:http://www.xuxueli.com/xxl-job 
+- 2、JFinal执行器Sample示例项目;
+- 3、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
+- 4、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
+- 5、执行器手动设置IP时将会绑定Host;
+- 6、规范项目目录,方便扩展多执行器;
+- 7、解决执行器回调URL不支持配置HTTPS时问题;
+- 8、执行器回调线程销毁前, 批量回调队列中数据,防止任务结果丢失;
+- 9、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
+- 10、任务日志文件路径时间戳格式化时SimpleDateFormat并发问题解决;
 
 ### TODO LIST
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;

+ 3 - 2
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java

@@ -18,7 +18,6 @@ public class XxlJobFileAppender {
 	// for JobThread (support log for child thread of job handler)
 	//public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 	public static final InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
-	public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// TODO, concurrent issues
 	public static String logPath = "/data/applogs/xxl-job/jobhandler/";
 
 	/**
@@ -37,6 +36,8 @@ public class XxlJobFileAppender {
         }
 
         // filePath/yyyy-MM-dd/
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
+
         String nowFormat = sdf.format(new Date());
         File filePathDateDir = new File(filePathDir, nowFormat);
         if (!filePathDateDir.exists()) {
@@ -44,7 +45,7 @@ public class XxlJobFileAppender {
         }
 
         // filePath/yyyy-MM-dd/9999.log
-		String logFileName = XxlJobFileAppender.sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
+		String logFileName = sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
 		return logFileName;
 	}