Browse Source

1. 优化JobContext中的BizLogger,由原来的去掉了threadlocal,解决taskTracker多线程的问题, 去掉LtsLoggerFactory.getLogger()用法

醉枫 7 years ago
parent
commit
ddf576dbe2

+ 1 - 1
README.md

@@ -18,7 +18,7 @@ oschina地址:
 这两个地址都会同步更新。感兴趣,请加QQ群:109500214 (加群密码: hello world)一起探讨、完善。越多人支持,就越有动力去更新,喜欢记得右上角star哈。
 
 ##1.7.1-SNAPSHOT(master)变更主要点
-1. 增加  jdbc.create.db.table(boolean)来决定是否需要创建数据库表
+1. 优化JobContext中的BizLogger,由原来的去掉了threadlocal,解决taskTracker多线程的问题, 去掉LtsLoggerFactory.getLogger()用法
 
 ## 框架概况
 LTS 有主要有以下四种节点:

+ 2 - 2
docs/LTS文档.md

@@ -195,10 +195,10 @@ public class LTSSpringConfig {
 ###定义自己的任务执行类
 ```java
 public class MyJobRunner implements JobRunner {
-    private final static BizLogger bizLogger = LtsLoggerFactory.getBizLogger();
     @Override
-    public Result run(Job job) throws Throwable {
+    public Result run(JobContext jobContext) throws Throwable {
         try {
+            BizLogger bizLogger = jobContext.getBizLogger();
             // TODO 业务逻辑
             // 会发送到 LTS (JobTracker上)
             bizLogger.info("测试,业务日志啊啊啊啊啊");

+ 1 - 1
docs/OLD_README.md

@@ -48,7 +48,7 @@ github地址:[https://github.com/ltsopensource/light-task-scheduler](https://git
      * 采用和dubbo一样的SPI扩展方式,可以实现任务队列扩展,日志记录器扩展等
 
 ###日志记录
-对于任务的分发,执行,还有用户通过 (BizLogger)  【LtsLoggerFactory.getBizLogger()】 输入的业务日志,LTS都有记录,用户可以在LTS Admin 后台界面查看某个任务的所有日志,可以实时查看这个任务的执行情况。 
+对于任务的分发,执行,还有用户通过 (BizLogger)  【JobContext#getBizLogger()】 输入的业务日志,LTS都有记录,用户可以在LTS Admin 后台界面查看某个任务的所有日志,可以实时查看这个任务的执行情况。 
 
 ###开发计划:
 * WEB后台管理:性能统计分析,预警等

+ 0 - 1
lts-core/src/main/java/com/github/ltsopensource/biz/logger/mysql/MysqlJobLogger.java

@@ -14,7 +14,6 @@ import com.github.ltsopensource.store.jdbc.builder.OrderByType;
 import com.github.ltsopensource.store.jdbc.builder.SelectSql;
 import com.github.ltsopensource.store.jdbc.builder.WhereSql;
 import com.github.ltsopensource.store.jdbc.dbutils.JdbcTypeUtils;
-import com.sun.tools.internal.ws.wsdl.document.soap.SOAPUse;
 
 import java.util.List;
 

+ 1 - 1
lts-core/src/main/java/com/github/ltsopensource/store/jdbc/builder/DeleteSql.java

@@ -120,7 +120,7 @@ public class DeleteSql {
         }
 
         if (start != null && end != null) {
-            sql.append(" ADN (").append(column).append(" BETWEEN ? AND ? ").append(")");
+            sql.append(" AND (").append(column).append(" BETWEEN ? AND ? ").append(")");
             params.add(start);
             params.add(end);
             return this;

+ 1 - 1
lts-core/src/main/java/com/github/ltsopensource/store/jdbc/builder/SelectSql.java

@@ -167,7 +167,7 @@ public class SelectSql {
         }
 
         if (start != null && end != null) {
-            sql.append(" ADN (").append(column).append(" BETWEEN ? AND ? ").append(")");
+            sql.append(" AND (").append(column).append(" BETWEEN ? AND ? ").append(")");
             params.add(start);
             params.add(end);
             return this;

+ 1 - 1
lts-core/src/main/java/com/github/ltsopensource/store/jdbc/builder/UpdateSql.java

@@ -128,7 +128,7 @@ public class UpdateSql {
         }
 
         if (start != null && end != null) {
-            sql.append(" ADN (").append(column).append(" BETWEEN ? AND ? ").append(")");
+            sql.append(" AND (").append(column).append(" BETWEEN ? AND ? ").append(")");
             params.add(start);
             params.add(end);
             return this;

+ 3 - 11
lts-tasktracker/src/main/java/com/github/ltsopensource/tasktracker/logger/BizLoggerAdapter.java

@@ -7,22 +7,14 @@ import com.github.ltsopensource.core.domain.JobMeta;
  */
 public abstract class BizLoggerAdapter implements BizLogger {
 
-    private final ThreadLocal<JobMeta> jobMetaThreadLocal;
-
-    public BizLoggerAdapter() {
-        this.jobMetaThreadLocal = new ThreadLocal<JobMeta>();
-    }
+    private JobMeta jobMeta;
 
     public void setJobMeta(JobMeta jobMeta) {
-        jobMetaThreadLocal.set(jobMeta);
-    }
-
-    public void removeJobMeta() {
-        jobMetaThreadLocal.remove();
+        this.jobMeta = jobMeta;
     }
 
     protected JobMeta getJobMeta() {
-        return jobMetaThreadLocal.get();
+        return jobMeta;
     }
 
 }

+ 12 - 15
lts-tasktracker/src/main/java/com/github/ltsopensource/tasktracker/runner/JobRunnerDelegate.java

@@ -12,6 +12,7 @@ import com.github.ltsopensource.core.support.SystemClock;
 import com.github.ltsopensource.tasktracker.Result;
 import com.github.ltsopensource.tasktracker.domain.Response;
 import com.github.ltsopensource.tasktracker.domain.TaskTrackerAppContext;
+import com.github.ltsopensource.tasktracker.logger.BizLogger;
 import com.github.ltsopensource.tasktracker.logger.BizLoggerAdapter;
 import com.github.ltsopensource.tasktracker.logger.BizLoggerFactory;
 import com.github.ltsopensource.tasktracker.monitor.TaskTrackerMStatReporter;
@@ -34,7 +35,6 @@ public class JobRunnerDelegate implements Runnable {
     private static final Logger LOGGER = LoggerFactory.getLogger(JobRunnerDelegate.class);
     private JobMeta jobMeta;
     private RunnerCallback callback;
-    private BizLoggerAdapter logger;
     private TaskTrackerAppContext appContext;
     private TaskTrackerMStatReporter stat;
     private Interruptible interruptor;
@@ -48,9 +48,6 @@ public class JobRunnerDelegate implements Runnable {
         this.callback = callback;
         this.jobMeta = jobMeta;
 
-        this.logger = (BizLoggerAdapter) BizLoggerFactory.getLogger(
-                appContext.getBizLogLevel(),
-                appContext.getRemotingClient(), appContext);
         stat = (TaskTrackerMStatReporter) appContext.getMStatReporter();
 
         this.interruptor = new InterruptibleAdapter() {
@@ -71,19 +68,21 @@ public class JobRunnerDelegate implements Runnable {
                 ((InterruptibleAdapter) interruptor).interrupt();
             }
 
-            LtsLoggerFactory.setLogger(logger);
-
             while (jobMeta != null) {
                 long startTime = SystemClock.now();
                 // 设置当前context中的jobId
-                logger.setJobMeta(jobMeta);
                 Response response = new Response();
                 response.setJobMeta(jobMeta);
+
+                BizLoggerAdapter logger = (BizLoggerAdapter) BizLoggerFactory.getLogger(
+                        appContext.getBizLogLevel(),
+                        appContext.getRemotingClient(), appContext);
+
                 try {
                     appContext.getRunnerPool().getRunningJobManager()
                             .in(jobMeta.getJobId(), this);
                     this.curJobRunner = appContext.getRunnerPool().getRunnerFactory().newRunner();
-                    Result result = this.curJobRunner.run(buildJobContext(jobMeta));
+                    Result result = this.curJobRunner.run(buildJobContext(logger, jobMeta));
 
                     if (result == null) {
                         response.setAction(Action.EXECUTE_SUCCESS);
@@ -110,8 +109,7 @@ public class JobRunnerDelegate implements Runnable {
                     stat.addRunningTime(time);
                     LOGGER.error("Job execute error : {}, time: {}, {}", jobMeta.getJob(), time, t.getMessage(), t);
                 } finally {
-                    checkInterrupted();
-                    logger.removeJobMeta();
+                    checkInterrupted(logger);
                     appContext.getRunnerPool().getRunningJobManager()
                             .out(jobMeta.getJobId());
                 }
@@ -125,13 +123,11 @@ public class JobRunnerDelegate implements Runnable {
                 DotLogUtils.dot("JobRunnerDelegate.run get job " + (this.jobMeta == null ? "NULL" : "NOT_NULL"));
             }
         } finally {
-            LtsLoggerFactory.remove();
-
             blockedOn(null);
         }
     }
 
-    private JobContext buildJobContext(JobMeta jobMeta) {
+    private JobContext buildJobContext(BizLoggerAdapter logger, JobMeta jobMeta) {
         JobContext jobContext = new JobContext();
         // 采用deepopy的方式 防止用户修改任务数据
         Job job = JobUtils.copy(jobMeta.getJob());
@@ -147,7 +143,8 @@ public class JobRunnerDelegate implements Runnable {
 
         jobContext.setJobExtInfo(jobExtInfo);
 
-        jobContext.setBizLogger(LtsLoggerFactory.getBizLogger());
+        logger.setJobMeta(jobMeta);
+        jobContext.setBizLogger(logger);
         return jobContext;
     }
 
@@ -206,7 +203,7 @@ public class JobRunnerDelegate implements Runnable {
         return !appContext.getConfig().getInternalData(Constants.MACHINE_RES_ENOUGH, true);
     }
 
-    private void checkInterrupted() {
+    private void checkInterrupted(BizLogger logger) {
         try {
             if (isInterrupted()) {
                 logger.info("SYSTEM:Interrupted");

+ 1 - 1
lts-tasktracker/src/main/java/com/github/ltsopensource/tasktracker/runner/JobRunnerTester.java

@@ -17,7 +17,7 @@ public abstract class JobRunnerTester {
         // 1. 设置LTS环境为 UNIT_TEST
         LTSConfig.setEnvironment(Environment.UNIT_TEST);
         // 设置 BizLogger
-        LtsLoggerFactory.setLogger(BizLoggerFactory.getLogger(Level.INFO, null, null));
+        jobContext.setBizLogger(BizLoggerFactory.getLogger(Level.INFO, null, null));
         // 2. load context (Spring Context 或者其他的)
         initContext();
         // 3. new jobRunner

+ 0 - 24
lts-tasktracker/src/main/java/com/github/ltsopensource/tasktracker/runner/LtsLoggerFactory.java

@@ -1,24 +0,0 @@
-package com.github.ltsopensource.tasktracker.runner;
-
-import com.github.ltsopensource.tasktracker.logger.BizLogger;
-
-/**
- * 这个日志器将日志发送给LTS平台
- * @author Robert HG (254963746@qq.com) on 3/27/15.
- */
-public final class LtsLoggerFactory {
-
-    private static final ThreadLocal<BizLogger> THREAD_LOCAL = new ThreadLocal<BizLogger>();
-
-    public static BizLogger getBizLogger() {
-        return THREAD_LOCAL.get();
-    }
-
-    protected static void setLogger(BizLogger logger){
-        THREAD_LOCAL.set(logger);
-    }
-
-    protected static void remove(){
-        THREAD_LOCAL.remove();
-    }
-}