mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-21 08:06:08 +08:00
add task executor framework
This commit is contained in:
parent
24389d318e
commit
2f02d4be9b
30
src/main/java/com/ctrip/zeus/task/AbstractTask.java
Normal file
30
src/main/java/com/ctrip/zeus/task/AbstractTask.java
Normal 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();
|
||||||
|
}
|
12
src/main/java/com/ctrip/zeus/task/Task.java
Normal file
12
src/main/java/com/ctrip/zeus/task/Task.java
Normal 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();
|
||||||
|
}
|
48
src/main/java/com/ctrip/zeus/task/TaskExecutor.java
Normal file
48
src/main/java/com/ctrip/zeus/task/TaskExecutor.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
src/main/java/com/ctrip/zeus/task/TaskManager.java
Normal file
19
src/main/java/com/ctrip/zeus/task/TaskManager.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
23
src/main/java/com/ctrip/zeus/task/log/LogAnalyzeTask.java
Normal file
23
src/main/java/com/ctrip/zeus/task/log/LogAnalyzeTask.java
Normal 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++);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue