add task executor framework

This commit is contained in:
xingchaowang 2015-12-07 12:46:40 +08:00
parent 24389d318e
commit 2f02d4be9b
5 changed files with 132 additions and 0 deletions

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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);
}
}
}
}
}

View file

@ -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();
}
}

View file

@ -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++);
}
}