常量类
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(Extract, Transform, Load)框架是用于大数据处理的一种关键技术,它涉及从各种数据源抽取数据,经过转换处理后,加载到目标存储系统的过程。在Java中,实现分布式ETL可以利用多线程、分布式计算以及...
Java调用Kettle进行数据处理是一种常见的集成方案,Kettle作为一个强大的ETL(Extract, Transform, Load)工具,因其完全由Java编写,因此可以无缝地与Java应用程序进行交互。Kettle提供了丰富的API,使得开发者能够...
- 通过Java调用Kettle,可以构建更复杂的工作流,例如在Web应用、定时任务服务或其他后台服务中嵌入ETL过程。 - 可以与其他Java框架(如Spring)集成,实现服务化部署和管理。 7. 文件KettleAndJava可能包含的...
Java调用Kettle 5.3任务是一种在Java应用程序中集成Kettle(Pentaho Data Integration,也称为ETL工具)的方式,以便利用其强大的数据转换和加载功能。以下是对这个主题的详细解释: 1. **Kettle简介**:Kettle是一...
Java调用Kettle API实现数据抽取DEMO是一个典型的ETL(提取、转换、加载)过程,其中Kettle(又称Pentaho Data Integration或KDI)是一个强大的数据集成工具,允许开发者通过图形化界面或者编程方式处理数据迁移和...
Java调用Kettle中的Job与转换是数据集成过程中的常见需求,Kettle(Pentaho Data Integration,简称PDI)是一种强大的ETL工具,而Java则作为通用编程语言,能够灵活地与各种系统进行交互。在Java中调用Kettle的Job和...
Java调用Kettle(Pentaho Data Integration,也称为Kettle或PDI)是一个常见的需求,特别是在集成数据处理和ETL(提取、转换、加载)流程中。Kettle是一款强大的开源数据集成工具,它提供了丰富的数据操作和转换功能...
Kettle API 是一个强大的工具,允许开发者通过Java代码与Pentaho Data Integration (Kettle) 进行交互,实现数据提取、转换和加载(ETL)过程的自动化。在给定的示例中,主要展示了如何使用Kettle API 创建、保存和...
基于Java的ETL数据处理系统 内容概要 本项目是一个基于Java的ETL(Extract, Transform, Load)数据处理系统,旨在通过界面配置自定义的数据流程图,生成流式任务进行数据处理。系统支持多种数据源和目标,并提供...
Java调用Kettle是将Java程序与Pentaho Kettle(也称为Spoon)集成,以便利用Kettle的强大ETL(提取、转换、加载)能力。Kettle是一款开源的数据集成工具,它允许开发者通过编写XML脚本来执行数据处理任务。在Java...
### Java调用Kettle转换详解 #### 一、引言 在数据处理领域,Pentaho Data Integration(PDI),通常被称为Kettle,是一款非常强大的开源ETL工具,用于完成数据抽取、转换与加载(Extract, Transform, Load)任务...
Java调用Kettle是一种常见的数据集成方案,Kettle(也称为Pentaho Data Integration或PDI)是一款强大的ETL(Extract, Transform, Load)工具,它允许用户通过图形化界面设计数据转换流程,并能被其他应用程序如Java...
本示例主要探讨如何利用Java来调用Kettle的jar包,实现同步任务的调度。 首先,我们需要理解Kettle的工作原理。Kettle的核心是作业(Job)和转换(Transformation)。作业负责任务的调度和流程控制,而转换则专注于...
Java调用Kettle是将Java程序与Pentaho Kettle(也称为Spoon)集成的过程,Kettle是一款强大的数据转换和ETL(提取、转换、加载)工具。在这个过程中,Java代码通过调用Kettle的相关API来执行转换或作业,实现数据...
Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...
Java远程调用Kettle是一种基于Java的ETL(Extract、Transform、Load)工具,能够对数据进行提取、转换、加载,以满足不同业务需求。Kettle提供了名为Carte的Web Server程序,也被称为Slave Server,启动该程序可以把...
该软件的亮点为:世界最轻的ETL批处理引擎(6KB)采用VPCS结构,启动快,效率高,操作简单,结构轻,网页嵌入,执行快,高并发,二次开发简易,自由修改源码实现各种风格。 << 100>>当前版本号V1.0.2软着登字第...
### 使用Java调用Kettle设计的关键知识点 #### 一、Kettle简介与Java集成背景 Pentaho Data Integration (PDI),通常被称为Kettle,是一款开源的数据集成工具,用于ETL(Extract-Transform-Load)操作。它支持图形...
本问题聚焦于如何通过Java调用shell脚本,向DataX传递参数,特别是包含特殊字符的where条件。在实际操作中,这可能会涉及到字符串转义、参数安全传递以及shell命令的构建等多个技术点。 首先,我们需要理解DataX的...