diff --git a/src/main/java/com/ctrip/zeus/task/AbstractTask.java b/src/main/java/com/ctrip/zeus/task/AbstractTask.java new file mode 100644 index 00000000..ec608b71 --- /dev/null +++ b/src/main/java/com/ctrip/zeus/task/AbstractTask.java @@ -0,0 +1,30 @@ +package com.ctrip.zeus.task; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +/** + * @author:xingchaowang + * @date: 12/7/2015. + */ +public abstract class AbstractTask implements Task { + @Resource + private TaskManager taskManager2; + + @PostConstruct + private void init() { + taskManager2.add(this); + } + + @Override + public String getName() { + return getClass().getSimpleName(); + } + + @Override + public long getInterval() { + return 60000; + } + + public abstract void run(); +} diff --git a/src/main/java/com/ctrip/zeus/task/Task.java b/src/main/java/com/ctrip/zeus/task/Task.java new file mode 100644 index 00000000..9a3bdbaa --- /dev/null +++ b/src/main/java/com/ctrip/zeus/task/Task.java @@ -0,0 +1,12 @@ +package com.ctrip.zeus.task; + +/** + * @author:xingchaowang + * @date: 12/7/2015. + */ +public interface Task { + + public void run(); + public String getName(); + public long getInterval(); +} diff --git a/src/main/java/com/ctrip/zeus/task/TaskExecutor.java b/src/main/java/com/ctrip/zeus/task/TaskExecutor.java new file mode 100644 index 00000000..7f4aa7ac --- /dev/null +++ b/src/main/java/com/ctrip/zeus/task/TaskExecutor.java @@ -0,0 +1,48 @@ +package com.ctrip.zeus.task; + +import com.netflix.config.DynamicBooleanProperty; +import com.netflix.config.DynamicLongProperty; +import com.netflix.config.DynamicPropertyFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author:xingchaowang + * @date: 12/7/2015. + */ +public class TaskExecutor extends Thread{ + private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + private DynamicBooleanProperty taskEnabled = null; + private DynamicLongProperty taskInterval = null; + + private Task task; + + public TaskExecutor(Task task) { + this.task = task; + + taskEnabled = DynamicPropertyFactory.getInstance().getBooleanProperty("task."+task.getName()+".enabled", true); + taskInterval = DynamicPropertyFactory.getInstance().getLongProperty("task."+task.getName()+".interval", task.getInterval()); + + setName("Task-Executor-" + task.getName()); + setDaemon(true); + } + + @Override + public void run() { + while (true) { + try { + if (!taskEnabled.get()) continue; + task.run(); + } catch (Exception e) { + logger.error("Encounter an error while task executing.", e); + } finally { + try { + sleep(taskInterval.get()); + } catch (Exception e) { + logger.warn("Encounter an error while task sleeping.", e); + } + } + } + } +} diff --git a/src/main/java/com/ctrip/zeus/task/TaskManager.java b/src/main/java/com/ctrip/zeus/task/TaskManager.java new file mode 100644 index 00000000..695b0588 --- /dev/null +++ b/src/main/java/com/ctrip/zeus/task/TaskManager.java @@ -0,0 +1,19 @@ +package com.ctrip.zeus.task; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author:xingchaowang + * @date: 12/7/2015. + */ +@Component("taskManager2") +public class TaskManager { + private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public void add(Task task) { + logger.info("Add task " + task.getClass().getSimpleName()); + new TaskExecutor(task).start(); + } +} diff --git a/src/main/java/com/ctrip/zeus/task/log/LogAnalyzeTask.java b/src/main/java/com/ctrip/zeus/task/log/LogAnalyzeTask.java new file mode 100644 index 00000000..f7424435 --- /dev/null +++ b/src/main/java/com/ctrip/zeus/task/log/LogAnalyzeTask.java @@ -0,0 +1,23 @@ +package com.ctrip.zeus.task.log; + +import com.ctrip.zeus.task.AbstractTask; +import org.springframework.stereotype.Component; + +/** + * @author:xingchaowang + * @date: 12/7/2015. + */ +@Component("logAnalyzeTask") +public class LogAnalyzeTask extends AbstractTask{ + private int i = 0; + + @Override + public long getInterval() { + return 2000; + } + + @Override + public void run() { + System.out.println("########################################" + i++); + } +}