`
LSQ6063
  • 浏览: 68056 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java一般任务较好的写法举例

阅读更多

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定时任务实现方法:Quartz API 的应用与实践 #### 一、Quartz API简介 Quartz 是一个开源项目,提供了丰富的调度功能,适用于各种Java应用中的定时任务需求。它由Michael Lipton(mwlipton@us.ibm.com)等...

    Java语言课程设计任务书及题目

    课程设计报告的编写需遵循特定的格式,包括封面、目录、设计任务概述、个人任务描述、程序功能介绍、设计分析、程序结构、模块功能说明、源代码、操作指南、实验结果和设计心得等内容,旨在全面反映设计过程和成果。

    JAVA的代码书写规范

    JAVA 代码书写规范 JAVA 代码书写规范是软件工程领域的一项重要组成部分,旨在提高程序的可靠性、可读性、可修改性、可维护性和一致性。以下是 JAVA 代码书写规范的详细介绍: 一、目的 JAVA 代码书写规范的...

    java试验及实验报告书写

    【Java试验及实验报告书写】 Java语言的学习不仅仅是理论上的研究,更重要的是通过实践来加深理解。实验是检验和巩固编程技能的重要环节。本实验报告主要围绕两个实验展开,分别是Java开发环境J2SE的配置与使用,...

    java for循环的几种写法

    "java for 循环的几种写法" 在 Java 编程语言中,for 循环是一种非常常用的循环语句,用于遍历数组、Collection 等类型的对象。在 J2SE 1.5 中,Java 引入了一种新的 for 循环语法,称为“增强的 for 循环”或...

    java 书写规范

    较高级的断开比较低级的断开更好,新行应与同级上一行的开头对齐。缩进的单位应使用 4 个空格,不使用制表符而尽量使用空格。通常语句使用 8 个空格缩进,就要折行,由于传统的(4 个空格)缩进使观察程序体比较难。...

    java代码书写规范

    【Java代码书写规范】 在Java编程中,代码的书写规范是非常重要的,它有助于提高代码的可读性,便于团队协作和后期维护。以下是一些关键的命名规则和书写规范: 1. **命名规则**: - **通用规则**:所有命名应该...

    java代码-使用java解决mybatis模糊匹配写法的源代码

    java代码-使用java解决mybatis模糊匹配写法的源代码 ——学习参考资料:仅用于个人学习使用!

    Java中素数的写法

    关于Java中素数的概念,及Java代码的写法,写了几种方法

    关于动态规划求最大子段和的Java代码写法

    关于动态规划求最大子段和的Java代码写法 本文主要讲述了使用 Java 语言实现动态规划算法来求最大子段和的代码写法。动态规划是一种非常重要的算法设计技术,它可以解决许多复杂的问题。 首先,我们需要了解什么是...

    java日历各种写法

    Java日历类是Java编程语言中处理日期和时间的核心组件,它提供了丰富的API来操作日期,包括获取、设置、比较和格式化等。在Java中,`java.util.Calendar`是抽象基类,而`java.util.GregorianCalendar`是其最常见的...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-097-Java基本语法-控制语句-for语句-for语句的其它写法.avi 北京动力节点-Java编程零基础教程-098-Java基本语法-控制语句-while语句-基本语法.avi 北京动力节点-Java编程零基础...

    quartz 实现按天、按周、按月定时任务的简单demo

    Quartz 是一个强大的开源作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者创建、调度和执行周期性任务,而无需直接处理线程或时间触发器。在这个“quartz 实现按天、按周、按月定时任务的...

    ( java JDBC连接不同的数据库写法sql,oracle,mysql

    java JDBC连接不同的数据库写法sql,oracle,mysql 的很好例子

    一个java 面向对象写法的判断回文数

    一个java 面向对象字符串写法的判断回文数 假如输入非数字 会提示输入数字 利用循环写的 大家多多支持

    自己整理的java代码书写规范

    Java代码书写规范是编程实践中的一项重要指导原则,它旨在提高代码的可读性、可维护性和团队协作效率。以下是一份详细的Java代码规范总结: 1. **命名规范**: - **项目命名**:项目名应全部为小写单词,具有代表...

    java输入输出流的两种写法

    以下是两种常见的Java输入输出流的写法及其详细解释: 1. 字节流: - **FileInputStream** 和 **FileOutputStream**:这是处理文件输入输出的基本字节流类。`FileInputStream` 用于从文件读取字节,而 `...

    java中配置文件数据库连接写法

    在Java编程中,配置文件是用于存储应用程序的配置信息,如数据库连接参数,这使得代码与配置分离,便于管理和维护。下面将详细讲解如何在Java中编写配置文件以实现数据库连接。 1. 配置文件格式 最常见的配置文件...

    Java简易随机数生成

    Java简易随机数生成 下载完请输入测试代码 public static void main(String[] args) { System.out.println(random(50,100));//example System.out.println(random(50.0,100.0)); }

Global site tag (gtag.js) - Google Analytics