package com.mierx.platform.kettle;
import java.util.List;
import org.apache.log4j.Logger;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import com.mierx.core.modules.util.PropertiesLoader;
/**
*
* 交换工具
*
* @author gaochunhu
* @Date: 2018-9-25 下午02:15:18
* @version 3.5
* @Company: mierx
* @Copyright: Copyright © 2018 Shaanxi Tiancheng Software Co.,Ltd
*/
public class KettleUtils
{
/**
* 日志记录
*/
private static Logger logger = Logger.getLogger(KettleUtils.class);
private static final String kettleId = "kettle_resource";
private static final String kettleName = "kettle_resource";
private static final String kettleDes = "kettle_resource";
/**
* 获取数据资源库连接
*/
private static DatabaseMeta databaseMeta = null;
private static KettleDatabaseRepository repository = null;
/**
* 初始化连接数据资源库
*
* @Description:
*/
protected static DatabaseMeta getDatabaseMeta()
{
if (null == databaseMeta)
{
PropertiesLoader prop = new PropertiesLoader("application.properties");
databaseMeta =
new DatabaseMeta("mysql", "mysql", "jdbc", prop.getProperty("host", "").trim(), prop.getProperty("db", "swtdexchang?characterEncoding=utf8")
.trim(), prop.getProperty("port", "3306").trim(), prop.getProperty("user", "root").trim(), prop.getProperty("pass", "mysql").trim());
}
return databaseMeta;
}
/**
* 进行资源初始化
*
* @throws KettleException
* @Description:
*/
private static void init()
throws KettleException
{
// 初始化环境
KettleEnvironment.init();
// 创建DB资源库
repository = new KettleDatabaseRepository(); // 报异常,说一个类找不到
DatabaseMeta databaseMeta = getDatabaseMeta();
// 选择资源库
KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta(kettleId, kettleName, kettleDes, databaseMeta);
repository.init(kettleDatabaseRepositoryMeta);
// 连接资源库
repository.connect("admin", "admin");
}
protected static List<String> findAllJobs()
throws KettleException
{
// 初始化资源库信息
init();
// 查找作业并进行作业计划
return null;
}
/**
* 启动执行资源库中的作业
*
* @param jobName 执行作业的名称
* @param jobPath 作业所在路径
* @throws KettleException
* @Description:
*/
protected static void runRepJob(final String jobName, final String jobPath)
throws KettleException
{
// 初始化资源库信息
init();
// 查找作业并进行作业计划
RepositoryDirectoryInterface directory = repository.findDirectory(jobPath);
JobMeta jobMetaRep = ((Repository)repository).loadJob(jobName, directory, null, null);
Job job = new Job(repository, jobMetaRep);
job.start();
job.waitUntilFinished();
if (job.getErrors() > 0)
{
logger.error(String.format("%s run Failure!", jobPath + "/" + jobName));
}
else
{
logger.info(String.format("%s run successfully!", jobPath + "/" + jobName));
}
repository.disconnect();
}
protected static void runRepTransform(final String transName, final String transPath)
throws KettleException
{
// 初始化资源库信息
init();
// 查找转换并进行转化操作
RepositoryDirectoryInterface directoryInterface = repository.findDirectory(transPath);
// 选择转换
TransMeta transMeta = repository.loadTransformation(transName, directoryInterface, null, true, null);
Trans trans = new Trans(transMeta);
trans.execute(null);
trans.waitUntilFinished();// 等待直到数据结束
if (trans.getErrors() > 0)
{
logger.error(String.format("%s run Failure!", transPath + "/" + transName));
}
else
{
logger.info(String.format("%s run successfully!", transPath + "/" + transName));
}
repository.disconnect();
}
// public static void main(String[] args)
// throws KettleException
// {
// String jobName = "商务厅数据交换总入口";
// String jobPath = "/商务厅数据交换";
// runRepJob(jobName, jobPath);
// String transName = "招商引资_省内实施项目表";
// String transPath = "/商务厅数据交换/陕西省招商引资系统/省内实施项目";
// runRepTransform(transName, transPath);
//
// }
}
- 浏览: 109800 次
- 性别:
- 来自: 西安
最新评论
-
wgyyouge:
有个命令行下的高效迁移工具ora2mysqlhttp://ww ...
kettle解决方案设计 -
空白的泡:
博主 在吗, 你这个方式。。我前面按照弄好了。 可是启动 to ...
java发送https请求证书问题
相关推荐
2. **配置Kettle环境**:确保Kettle的库文件路径、作业和转换文件路径等配置正确。如果是在企业环境中,可能还需要配置数据库连接信息,因为Kettle通常使用元数据存储Job和转换的定义。 3. **编写Java代码**:创建`...
本篇笔记主要探讨如何利用Java调用Kettle API来执行转换(Transformation)和作业(Job),以及如何通过Java代码生成Kettle转换。 首先,理解Kettle的基本概念是必要的。转换是数据清洗、转换和加载过程的逻辑单元...
#### 五、执行转换 加载完转换后,就可以创建一个`Trans`对象,并执行它: ```java Trans trans = new Trans(transMeta); ``` 为了传递参数给转换中的步骤,可以使用`execute`方法: ```java String date = ...
Java可以通过调用Kettle的API来执行作业和转换。首先,需要在项目中引入Kettle的JAR库,例如`pentaho-kettle-core`和`pentaho-kettle-engine`。然后,可以使用`TransMeta`和`JobMeta`类加载作业或转换的元数据,...
kettle集成应用之java调用执行transformation和job kettle是一款功能强大的数据集成工具,可以在java应用程序中集成应用,实现调用资源库上和本地的transformation和job。下面是kettle集成应用的详细知识点: 一、...
- 启动转换:调用`Trans.start()`方法执行转换。 - 监控执行:通过`TransListener`接口监听转换的进度和状态。 - 处理结果:转换完成后,可以通过`Trans.getErrors()`和`Trans.getResult()`等方法获取执行结果。 ...
总结起来,这个压缩包提供的Java代码示例展示了如何使用Kettle的Java API来创建和运行作业。通过这种方式,开发者可以更灵活地控制数据处理流程,特别是在复杂的企业级数据集成项目中。理解和掌握这些技术对于提高...
Java调用Kettle 4.2转换实例是一个实用的技术应用场景,尤其在大数据处理和ETL(提取、转换、加载)流程中。Kettle是一款开源的数据集成工具,也称为Pentaho Data Integration(PDI),它提供了图形化的界面来设计...
Kettle提供了丰富的API,使得开发者能够方便地在Java代码中执行转换(Transformation)和作业(Job),从而实现数据提取、清洗、转换和加载等一系列复杂的数据操作。 首先,理解Java调用Kettle的核心在于引入必要的...
- **执行转换和作业**:使用`Trans`和`Job`类实例化并运行它们,传递TransMeta和JobMeta对象,以及可能的参数。 4. **测试方法**:在Java代码中,可以编写测试方法来验证Kettle任务的正确性。这可能包括设置输入...
Java调用Kettle(Pentaho Data Integration,也称为Kettle或PDI)是一个常见的需求,特别是在集成数据处理和ETL(提取、转换、加载)流程中。Kettle是一款强大的开源数据集成工具,它提供了丰富的数据操作和转换功能...
在Java中调用Kettle时,通常会使用`TransExecutorService`或`JobExecutorService`来执行转换和作业。以下是一个简单的示例,展示如何启动一个Kettle转换: ```java import org.pentaho.di.core.KettleEnvironment; ...
Java远程调用Kettle是一种基于Java的ETL(Extract、Transform、Load)工具,能够对数据进行提取、转换、加载,以满足不同业务需求。Kettle提供了名为Carte的Web Server程序,也被称为Slave Server,启动该程序可以把...
在Kettle中,可以将作业和转换保存为.kjb和.ktr文件,然后通过执行这些文件来运行相应的任务。 在Java中调用Kettle的jar包,我们通常会依赖Kettle的API,如`org.pentaho.di.core.KettleClientEnvironment`和`org....
Kettle提供了丰富的转换和作业元素,能够处理各种数据源和目标,其中就包括对Java类的调用。在标题《kettle中调用java类》示例代码中,我们关注的是如何在Kettle的转换或作业中嵌入Java代码,以实现更复杂的数据处理...
一旦转换和作业准备好,可以部署到Kettle的Job Executor Server或使用Pentaho BI Server来管理和执行。同时,Kettle提供了日志和监控功能,可以追踪作业执行状态,检查错误日志,以便于问题排查和性能优化。 总之...
Java调用Kettle是将Java程序与Pentaho Kettle(也称为Kettle或 Spoon)集成,以便在Java环境中执行Kettle的作业(Job)和转换(Transformation)。Kettle是一款强大的ETL(提取、转换、加载)工具,它提供了一种图形...
1. `kettle-engine.jar`: 包含Kettle引擎,用于执行转换和作业。 2. `kettle-core.jar`: 提供Kettle的基础类和接口。 3. `kettle-api.jar`: 提供API接口,使得与其他系统交互成为可能。 4. `kettle-database.jar`: ...
- 最后,执行转换操作并保存结果。 6. **示例代码**: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; public class DocToPdfConverter { public static void main...