`
t22011787
  • 浏览: 74844 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JAVA调用ETL批处理指令

 
阅读更多
常量类
package common;

import com.chinacreator.config.ConfigManager;

/**
 * <p>类的描述:定义常量类</p>
 * @author gao.tang
 * @version 1.0
 * @date 2011-5-31 下午05:00:10
 */
public class Const {
	
	public static final String ETL_PATH = ConfigManager.getInstance().getConfigValue("etlPath", "D:\\workspace\\kettle-3.2.0\\distrib");
	
	public static final String TRAN_BAT_FILENAME = "Pan.bat";
	public static final String JOB_BAT_FILENAME = "Kitchen.bat";
	public static final String AUTH_PARAM = " -rep=zwres -user=admin -pass=admin ";
	
	
	public static final String getOS(){
		return System.getProperty("os.name");
	}
}

帮助类
package common.shell;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import common.Const;

/**
 * <p>
 * 类的描述:脚本执行帮助类
 * </p>
 * 
 * @author gao.tang
 * @version 1.0
 * @date 2011-6-1 下午02:55:06
 */
public class ShellUtil {
	
	static StringBuffer outInfo;
	public static ShellUtil getInstance() {
		return new ShellUtil();
	}

	/**
	 * 执行作业
	 * 
	 * @param dir
	 *            作业所在目录
	 * @param jobName
	 *            作业名称
	 * @param params
	 *            作业扩展定义参数
	 * @return 返回0表示没有出现异常
	 */
	public int executeJob(String dir, String jobName, Map<String, String> params) {
		return execute(dir, jobName, params, true);
	}

	/**
	 * 执行转换
	 * 
	 * @param dir
	 * @param tranName
	 * @param params
	 * @return 返回0表示没有出现异常
	 */
	public int executeTran(String dir, String tranName,
			Map<String, String> params) {
		return execute(dir, tranName, params, false);
	}

	private int execute(String dir, String name, Map<String, String> params,
			boolean isJob) {
		String base[] = null;
		if (Const.getOS().equals("Windows 95")) {
			base = new String[] { "command.com", "/C" };
		} else if (Const.getOS().startsWith("Windows")) {
			base = new String[] { "cmd.exe", "/C" };
		}
		List<String> cmds = new ArrayList<String>();
		for (int i = 0; i < base.length; i++)
			cmds.add(base[i]);
		if (Const.getOS().equals("Windows 95")
				|| Const.getOS().startsWith("Windows")) {
			StringBuffer cmdline = new StringBuffer(300);
			cmdline.append("\"");
			if (isJob) {
				cmdline.append(Const.JOB_BAT_FILENAME).append(" ");
			} else {
				cmdline.append(Const.TRAN_BAT_FILENAME).append(" ");
			}
			cmdline.append(Const.AUTH_PARAM).append(" -dir=").append(dir).append(" ");
			if (isJob) {
				cmdline.append("-job=").append(name).append(" ");
			} else {
				cmdline.append("-trans=").append(name).append(" ");
			}
			if (params != null && !params.isEmpty()) {
				// 拼接扩展参数
				Iterator<Entry<String,String>> iterator = params.entrySet().iterator();
				while(iterator.hasNext()){
					Entry<String,String> entry = iterator.next();
					cmdline.append(" -param=\"").append(entry.getKey()).append("=")
						.append(entry.getValue()).append("\" ");
				}
				
			}
			cmdline.append("\"");
			cmds.add(cmdline.toString());
		}
		ProcessBuilder procBuilder = new ProcessBuilder(cmds);
		String filePath = Const.ETL_PATH;
		File file = new File(filePath);
		procBuilder.directory(file);
		Process proc;
		try {
			outInfo = new StringBuffer();
			proc = procBuilder.start();
			// any error message?
			StreamLogger errorLogger = new StreamLogger(proc.getErrorStream(),
					" (stderr)",outInfo);
			// any output?
			StreamLogger outputLogger = new StreamLogger(proc.getInputStream(),
					" (stdout)",outInfo);
			// kick them off
			new Thread(errorLogger).start();
			new Thread(outputLogger).start();
			proc.waitFor();
			int errorCount = proc.exitValue();
			proc.getErrorStream().close();
			proc.getOutputStream().close();
			return errorCount;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return -1;
	}

}


日志输出类
package common.shell;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


/**
 * <p>类的描述:bat命令行执行脚本日志</p>
 * @author gao.tang
 * @version 1.0
 * @date 2011-6-1 下午02:49:49
 */
public class StreamLogger implements Runnable
{
    private InputStream is;
    private String      type;
    private StringBuffer outInfo;//add by jun.feng 记录工资自动生成所运行的etl日志
    public StreamLogger(InputStream is, String type,StringBuffer outInfo)
    {
        this.is = is;
        this.type = type;
        this.outInfo = outInfo;
    }

    public void run()
    {
        try
        {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null)
            {
                outInfo.append(type + " - " +  line);
            }
        }
        catch (IOException ioe)
        {
        	ioe.printStackTrace();
        }
    }
}

package common.shell;

import java.util.HashMap;
import java.util.Map;


/**
 * <p>类的描述:</p>
 * @author gao.tang
 * @version 1.0
 * @date 2011-6-2 上午10:13:52
 */
public class ShellBusinessOp {
	
	/**
	 * 删除核销记录数据
	 * @param annual
	 * @param payId
	 * @return
	 */
	public synchronized static boolean executeDelHxjl(String annual,String[] pay_id){
		int state = -1;
		if(pay_id != null && pay_id.length > 0){
			StringBuilder payId = new StringBuilder();
			for(String payid : pay_id){
				payId.append("'").append(payid).append("',");
			}
			Map<String,String> params = new HashMap<String,String>();
			params.put("annual", annual);
			params.put("pay_id", payId.substring(0, payId.length() - 1));
			state = ShellUtil.getInstance().executeTran("/工资自动生成支付", "删除核销记录", params);
		}
		return state == 0;
	}
	
	/**
	 * 自动生成工资支付数据
	 * @return
	 */
	public synchronized static boolean executeWageAutoPay(){
		int state = -1;
		state = ShellUtil.getInstance().executeJob("/工资自动生成支付", "工资支付接口", null);
		return state == 0; 
	}
	
	/**
	 * 未核工资数据更新
	 * @return
	 */
	public synchronized static boolean executeUpdateWage(){
		int state = -1;
		state = ShellUtil.getInstance().executeJob("/工资自动生成支付", "工资视图删除更新", null);
		return state == 0;
	}
	
	/**
	 * 同步单位人员数据到表TB_DEPT_PEOPLENUM
	 * @return
	 */
	public synchronized static boolean executePeopleNum(){
		int state = -1;
		state = ShellUtil.getInstance().executeTran("/工资自动生成支付", "单位人口数据抽取", null);
		return state == 0;
	}
	
	/**
	 * 同步更新工资统发部门工资统计表
	 * @return
	 */
	public synchronized static boolean executeStatictsData(){
		int state = -1;
		state = ShellUtil.getInstance().executeTran("/工资自动生成支付", "获取工资统计数据接口", null);
		return state == 0;
	}
}
分享到:
评论

相关推荐

    Java分布式ETL框架

    Java分布式ETL(Extract, Transform, Load)框架是用于大数据处理的一种关键技术,它涉及从各种数据源抽取数据,经过转换处理后,加载到目标存储系统的过程。在Java中,实现分布式ETL可以利用多线程、分布式计算以及...

    java调用kettle需要的jar包

    Java调用Kettle进行数据处理是一种常见的集成方案,Kettle作为一个强大的ETL(Extract, Transform, Load)工具,因其完全由Java编写,因此可以无缝地与Java应用程序进行交互。Kettle提供了丰富的API,使得开发者能够...

    Java调用Kettle代码

    - 通过Java调用Kettle,可以构建更复杂的工作流,例如在Web应用、定时任务服务或其他后台服务中嵌入ETL过程。 - 可以与其他Java框架(如Spring)集成,实现服务化部署和管理。 7. 文件KettleAndJava可能包含的...

    java调用Kettle5.3任务

    Java调用Kettle 5.3任务是一种在Java应用程序中集成Kettle(Pentaho Data Integration,也称为ETL工具)的方式,以便利用其强大的数据转换和加载功能。以下是对这个主题的详细解释: 1. **Kettle简介**:Kettle是一...

    java调用kettle提供的API实现数据抽取DEMO

    Java调用Kettle API实现数据抽取DEMO是一个典型的ETL(提取、转换、加载)过程,其中Kettle(又称Pentaho Data Integration或KDI)是一个强大的数据集成工具,允许开发者通过图形化界面或者编程方式处理数据迁移和...

    java调用kettle中的job与转换-源码

    Java调用Kettle中的Job与转换是数据集成过程中的常见需求,Kettle(Pentaho Data Integration,简称PDI)是一种强大的ETL工具,而Java则作为通用编程语言,能够灵活地与各种系统进行交互。在Java中调用Kettle的Job和...

    java调用kettle的依赖包

    Java调用Kettle(Pentaho Data Integration,也称为Kettle或PDI)是一个常见的需求,特别是在集成数据处理和ETL(提取、转换、加载)流程中。Kettle是一款强大的开源数据集成工具,它提供了丰富的数据操作和转换功能...

    Kettle API - Java调用示例

    Kettle API 是一个强大的工具,允许开发者通过Java代码与Pentaho Data Integration (Kettle) 进行交互,实现数据提取、转换和加载(ETL)过程的自动化。在给定的示例中,主要展示了如何使用Kettle API 创建、保存和...

    基于Java的ETL数据处理系统.zip

    基于Java的ETL数据处理系统 内容概要 本项目是一个基于Java的ETL(Extract, Transform, Load)数据处理系统,旨在通过界面配置自定义的数据流程图,生成流式任务进行数据处理。系统支持多种数据源和目标,并提供...

    java调用Kettle引用jar包.zip

    Java调用Kettle是将Java程序与Pentaho Kettle(也称为Spoon)集成,以便利用Kettle的强大ETL(提取、转换、加载)能力。Kettle是一款开源的数据集成工具,它允许开发者通过编写XML脚本来执行数据处理任务。在Java...

    Java调用kettle转换

    ### Java调用Kettle转换详解 #### 一、引言 在数据处理领域,Pentaho Data Integration(PDI),通常被称为Kettle,是一款非常强大的开源ETL工具,用于完成数据抽取、转换与加载(Extract, Transform, Load)任务...

    java调用kettle示例

    Java调用Kettle是一种常见的数据集成方案,Kettle(也称为Pentaho Data Integration或PDI)是一款强大的ETL(Extract, Transform, Load)工具,它允许用户通过图形化界面设计数据转换流程,并能被其他应用程序如Java...

    用java调用kettle的jar包.zip

    本示例主要探讨如何利用Java来调用Kettle的jar包,实现同步任务的调度。 首先,我们需要理解Kettle的工作原理。Kettle的核心是作业(Job)和转换(Transformation)。作业负责任务的调度和流程控制,而转换则专注于...

    java调用kettle所需jar包(包含oracle和mysqljar驱动).rar

    Java调用Kettle是将Java程序与Pentaho Kettle(也称为Spoon)集成的过程,Kettle是一款强大的数据转换和ETL(提取、转换、加载)工具。在这个过程中,Java代码通过调用Kettle的相关API来执行转换或作业,实现数据...

    java调用shell向DataX传参,带where条件,特殊字符

    Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...

    java远程调用kettle说明与代码.pdf

    Java远程调用Kettle是一种基于Java的ETL(Extract、Transform、Load)工具,能够对数据进行提取、转换、加载,以满足不同业务需求。Kettle提供了名为Carte的Web Server程序,也被称为Slave Server,启动该程序可以把...

    ETL_Unicorn:数据可视化,数据挖掘,数据处理ETL

    该软件的亮点为:世界最轻的ETL批处理引擎(6KB)采用VPCS结构,启动快,效率高,操作简单,结构轻,网页嵌入,执行快,高并发,二次开发简易,自由修改源码实现各种风格。 &lt;&lt; 100&gt;&gt;当前版本号V1.0.2软着登字第...

    用java调用kettle设计包含源代码

    ### 使用Java调用Kettle设计的关键知识点 #### 一、Kettle简介与Java集成背景 Pentaho Data Integration (PDI),通常被称为Kettle,是一款开源的数据集成工具,用于ETL(Extract-Transform-Load)操作。它支持图形...

    java调用shell向DataX传递参数,where条件,包含特殊字符

    本问题聚焦于如何通过Java调用shell脚本,向DataX传递参数,特别是包含特殊字符的where条件。在实际操作中,这可能会涉及到字符串转义、参数安全传递以及shell命令的构建等多个技术点。 首先,我们需要理解DataX的...

Global site tag (gtag.js) - Google Analytics