1.定义任务
/**
* 表示一个任务
*
*/
public interface Task {
/**
* 运行实际的任务内容
*
* @throws Exception
*/
public void runTask() throws Exception;
/**
* 返回Task的信息
* @return
*/
public TaskInfo getTaskInfo();
/**
* 准备参数信息
* @param args
* @throws Exception
*/
void initTaskInfo(String[] args);
}
2.任务信息
/**
* 表示一个任务的信息
*
*/
public class TaskInfo {
private String taskName;
// 参数列表
private Map<String, String> arguments = new HashMap<String, String>();
public TaskInfo() {
}
public TaskInfo(String taskName) {
this.taskName = taskName;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public void addArgument(String argName, String argValue) {
arguments.put(argName, argValue);
}
public String getArgument(String argName) {
return arguments.get(argName);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(taskName);
if (arguments.size() > 0) {
for (Entry<String, String> arg : arguments.entrySet()) {
sb.append('[').append(arg.getKey()).append('=').append(arg.getValue()).append(']');
}
}
return sb.toString();
}
}
3.任务实现support类。
/**
* 任务support
*
*/
public abstract class TaskSupport implements Task {
protected TaskInfo taskInfo;
@Override
public void initTaskInfo(String[] args) {
if (args.length == 0) {
return;
}
taskInfo = new TaskInfo(args[0]);
// 初如化参数列表
for (int i = 1; i < args.length; i++) {
String[] argPair = args[i].split("=");
if (initArg(argPair[0], argPair[1])) {
taskInfo.addArgument(argPair[0], argPair[1]);
} else {
Log.warn("Argument ignored: " + args[i]);
}
}
}
protected boolean initArg(String name, String value) {
return false;
}
@Override
public TaskInfo getTaskInfo() {
return taskInfo;
}
@Override
final public void runTask() throws Exception {
initTask();
try {
doRunTask();
} finally {
afterRunTask();
}
}
/**
* 真正处理task的
*/
abstract protected void doRunTask() throws Exception;
/**
* 用于收尾工作,如资源的释放等等
*/
protected void afterRunTask() throws Exception {
}
/**
* 初始化task中的一些信息
*/
protected void initTask() throws Exception {
}
}
4.任务运行入口
/**
* 所有task的启动类
*
*
*/
public class TaskRunner {
private static final Log log = LogFactory.getLog(TaskRunner.class);
public static void main(String[] args) {
Task task = prepareTask(args);
if (task == null) {
return;
}
try {
log.info("Start running task: " + task.getTaskInfo());
task.runTask();
log.info("Finish running task: " + task.getTaskInfo());
} catch (Exception e) {
log.error("Error running Task: " + task.getTaskInfo(), e);
}
}
public static Task prepareTask(String[] args) {
String[] beanFiles = new String[] { "*.xml", "*.xml","*.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(beanFiles);
Map<String, Task> tasks = context.getBeansOfType(Task.class);
if (args.length < 1 || !tasks.containsKey(args[0])) {
log.error("No such task: " + args[0]);
log.info(getTaskListStr(tasks));
return null;
}
Task task = tasks.get(args[0]);
task.initTaskInfo(args);
return task;
}
private static String getTaskListStr(Map<String, Task> tasks) {
StringBuilder sb = new StringBuilder("All available tasks: ");
for (String taskName : tasks.keySet()) {
sb.append(taskName).append(',');
}
return sb.toString();
}
}
分享到:
相关推荐
后台JAVA定时任务写法,可在夜间批处理执行业务处理
Java语言课程设计任务书及题目 课程设计
java for循环的几种写法
java 日历 各种写法
Java代码书写规范 1 符号命名规则 符号名包括:模块名,变量名,常量名,方法(函数/子程序)名,数据区名,缓冲区名等。符号命名通常应遵循以下规则: 1.1 通用规则 (1)在所有命名中,都应使用标准的英文单词或...
JAVA的代码书写规范,学习介绍代码规则
java代码-使用java解决mybatis模糊匹配写法的源代码 ——学习参考资料:仅用于个人学习使用!
很全面的描述的java中规范的写法,主要是注释部分的写法
关于Java中素数的概念,及Java代码的写法,写了几种方法
北京动力节点-Java编程零基础教程-097-Java基本语法-控制语句-for语句-for语句的其它写法.avi 北京动力节点-Java编程零基础教程-098-Java基本语法-控制语句-while语句-基本语法.avi 北京动力节点-Java编程零基础...
java JDBC连接不同的数据库写法sql,oracle,mysql 的很好例子
一个java 面向对象字符串写法的判断回文数 假如输入非数字 会提示输入数字 利用循环写的 大家多多支持
Java简易随机数生成 下载完请输入测试代码 public static void main(String[] args) { System.out.println(random(50,100));//example System.out.println(random(50.0,100.0)); }
用java语言实现等差数列public class dc{ int a,d,n; dc(int x,int y,int z){ a=x; d=y; n=z; } public int getSum(){ int z=0; for(int i=0;i;i++) { z=z+a; a=a+d; } return z; } } class test{ public ...
java中配置文件数据库连接写法 还行。。需要的朋友可以拿去参考一下。。
java语言,后台导出图片到word文档中,这是一种简易的写法,基本上一眼即可看懂。亲测有效。如果有需要的,可以下载进行参考。
个人整理的一份java代码书写规范的文档,希望大家能够喜欢和指出其中的不足之处,谢谢了!
是 java里面简单的 程序 数学 里面 乘法列表
java输入输出流的两种写法,我自己写的
Java面试如何用Java实现一个回调函数