Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >kettle工具中嵌入java代码_kettle设置变量

kettle工具中嵌入java代码_kettle设置变量

作者头像
全栈程序员站长
发布于 2022-11-03 08:46:21
发布于 2022-11-03 08:46:21
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

Java调用Kettle工具方法

这里需要的主要依赖包下面已列出,其他的运行时缺什么补什么就行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-dbdialog</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>metastore</artifactId>
<version>7.1.0.0-12</version>
</dependency>

插件地址 https://download.csdn.net/download/xukun5137/12267874

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * Java调用Kettle工具类 * * @classname KettleUtil * @date 2020/3/24 16:24 */
public final class KettleUtil { 

private static final Logger log = LoggerFactory.getLogger(KettleUtil.class);
private static final String KETTLE_BASE_DIR = "D:\\kettle";
private static final String KETTLE_KET_DIR = KETTLE_BASE_DIR + "\\ktr";
private static final String KETTLE_PLUGIN_DIR = KETTLE_BASE_DIR + "\\plugins";
static { 

try { 

log.debug("加载Kettle插件");
StepPluginType.getInstance().getPluginFolders().add(new PluginFolder(KETTLE_PLUGIN_DIR, false, true));
log.debug("Kettle插件加载成功");
log.debug("初始化Kettle插件环境");
KettleEnvironment.init();
log.debug("Kettle插件环境初始化完成");
} catch (KettleException e) { 

log.error("Kettle插件加载初始化失败");
}
}
/** * 调用Kettle插件执行KTR文件 * * @param ktrName 目标KTR文件名称 * @param params KTR文件所需要的参数信息 * * @return void * @date 2020/3/24 16:31 */
public static void runKtr(String ktrName, Map<String, String> params) { 

KettleLoggingEventListener listener = null;
try { 

log.debug("开始执行Kettler任务");
log.debug("创建TransMeta源数据对象");
TransMeta transMeta = new TransMeta(KETTLE_KET_DIR + "\\" + ktrName);
log.debug("传入KTR文件所需要的参数值");
if (null != params) { 

for (Map.Entry<String, String> entry : params.entrySet()) { 

transMeta.setVariable(entry.getKey(), entry.getValue());
}
}
Trans transformation = new Trans(transMeta);
log.debug("设置Kettle日志级别");
transformation.setLogLevel(LogLevel.BASIC);
log.debug("创建日志监听程序");
listener = new ConsoleLoggingEventListener();
KettleLogStore.getAppender().addLoggingEventListener(listener);
log.debug("开始执行Kettle文件");
transformation.prepareExecution(null);
transformation.startThreads();
log.debug("等待Kettle执行完成");
transformation.waitUntilFinished();
if (transformation.getErrors() > 0) { 

log.error("Kettle执行过程中发生异常");
throw new RuntimeException("Kettle执行过程中发生异常,请查看日志信息");
} else { 

log.debug("Kettle执行成功");
}
} catch (Exception e) { 

log.error("Kettle执行失败", e);
} finally { 

if(null != listener){ 

KettleLogStore.getAppender().removeLoggingEventListener(listener);
}
log.debug("Kettle执行结束");
}
}
/** * 调用Kettle执行作业文件 * * @methodname runJob * @param kjbName 作业文件名称 * @param params 作业参数 * * @return void * @date 2020/3/24 18:33 */
public static void runJob(String kjbName, Map<String, String> params) throws Exception { 

KettleLoggingEventListener kettlelog = null;
try { 

log.debug("开始执行Kettle任务");
log.debug("创建Job的源数据对象");
JobMeta jobMeta = new JobMeta(KETTLE_KET_DIR + "\\" + kjbName, null);
log.debug("创建Job对象");
Job job = new Job(null, jobMeta);
log.debug("传入作业执行需要的参数");
if (null != params) { 

for (Map.Entry<String, String> entry : params.entrySet()) { 

job.setVariable(entry.getKey(), entry.getValue());
}
}
log.debug("设置Kettle日志级别");
job.setLogLevel(LogLevel.BASIC);
log.debug("创建日志监听程序");
kettlelog = new ConsoleLoggingEventListener();
KettleLogStore.getAppender().addLoggingEventListener(kettlelog);
log.debug("开始执行Job");
job.start();
log.debug("等待Job执行完成");
job.waitUntilFinished();
job.setFinished(true);
if (job.getErrors() > 0) { 

log.error("Job执行过程中发生异常");
throw new RuntimeException("Job执行过程中发生异常,请查看日志信息");
} else { 

log.debug("Job执行成功");
}
} catch (Exception e) { 

log.error("Kettle执行失败", e);
} finally { 

if(null != kettlelog ){ 

KettleLogStore.getAppender().removeLoggingEventListener(listener);
}
log.debug("Kettle执行结束");
}
}
}

对于日志监听器需要注意的地方,日志监听器不针对某一个执行过程,如果并发执行Kettle时,每一个执行过程都会输出到所有的日志监听器中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181330.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
kettle工具使用及集成[通俗易懂]
Kettle是一款免费开源的基于Java的企业级ETL工具,功能强大简单易用,无可抗拒。
全栈程序员站长
2022/11/07
1.2K0
http请求工具类 HttpClient4Util
1、依赖 <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.6</version> </dependency> 2、HttpClient4Util http请求工具类 点击查看代码 import lombok.extern.slf4j.Slf4j; import org.apach
化羽羽
2022/11/12
5570
kettle学习笔记(三)——kettle资源库、运行方式与日志
  资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中。
HUC思梦
2020/09/03
6K0
kettle学习笔记(三)——kettle资源库、运行方式与日志
07-PDI(Kettle)源码编译8.2.0.0.R版本
博客上有很多关于PDI源码编译的文章,但大多版本较早,或是有些文件已经找不多,本博客基于2021年10月的PDI源码编译过程制作而成,并在编译过程中解决了对应的问题,解决方案放在博客最后。
IT从业者张某某
2022/11/12
2.7K1
07-PDI(Kettle)源码编译8.2.0.0.R版本
日常开发必备神器 HttpUtil 分享(超详细)
最近在工作中需要在后台调用各种上传、下载、以及第三方服务接口,经过研究决定使用 HttpClient,自己封装了一个 HttpClient 工具类,简单轻松的实现get、post、put、delete 以及上传、下载请求,在此分享给大家。
Java极客技术
2022/12/04
3.4K1
【YashanDB知识库】Kettle迁移MySQL到YashanDB
由于YMP不支持Latin1字符集MySQL数据库,导致MySQL的中文数据迁移到YashanDB,变成乱码。因此使用Kettle迁移可以规避该问题。
用户10349277
2025/03/03
1430
Kettle构建Hadoop ETL实践(三):Kettle对Hadoop的支持
本篇演示使用Kettle操作Hadoop上的数据。首先概要介绍Kettle对大数据的支持,然后用示例说明Kettle如何连接Hadoop,如何导入导出Hadoop集群上的数据,如何用Kettle执行Hive的HiveQL语句,还会用一个典型的MapReduce转换,说明Kettle在实际应用中是怎样利用Hadoop分布式计算框架的。本篇最后介绍如何在Kettle中提交Spark作业。
用户1148526
2020/09/02
6.8K0
05-PDI(Kettle)脚本执行
作业和转换可以在图形化界面里执行,但这只是在开发、测试和调试阶段。在开发完成后,需要部署到实际运行环境,在部署阶段,Spoon就很少用到了。
IT从业者张某某
2022/11/12
1.2K0
05-PDI(Kettle)脚本执行
细说Java主流日志工具库
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。 我们先来逐一了解一下主流日志工具。 java.util
静默虚空
2018/01/05
1.3K0
细说Java主流日志工具库
细说 Java 主流日志工具库
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。在 Java 世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。
用户1516716
2019/08/13
1.3K0
细说 Java 主流日志工具库
Redis的数据记录与回放
前文介绍了byteman的基本语法以及流量回放平台,今天一起看下如何使用byteman如何对 Redis 相关命令进行数据记录和回放.
一个架构师
2022/06/27
5260
大数据技术之_18_大数据离线平台_03_数据处理+工具代码导入+业务 ETL 实现+创建数据库表
  即按天分表,一天的数据存放于一张表中,rowkey 采用随机值,不需要有特定规律,尽可能的散列。
黑泽君
2019/04/23
1.2K0
大数据技术之_18_大数据离线平台_03_数据处理+工具代码导入+业务 ETL 实现+创建数据库表
Kettle工具——Spoon、Kitchen、Pan、Carte
Spoon是Kettle的集成开发环境(IDE)。它基于SWT提供了图形化的用户接口,主要用于ETL的设计。 在Kettle安装目录下,有启动Spoon的脚本。如Windows下的Spoon.bat,类UNIX下的spoon.sh。Windows用户还可以通过执行Kettle.exe启动Spoon。Spoon的屏幕截图如图1所示。
用户1148526
2020/05/26
8.7K0
3-网站日志分析案例-MapReduce执行日志清洗
Linux环境 Windows环境 均做了调试 本文代码是基于window开发,因为数据量较大时,相比虚拟机,本地运行更顺畅些,还不是没钱买服务器。。。
IT从业者张某某
2022/11/12
6200
3-网站日志分析案例-MapReduce执行日志清洗
Quartz-Java Web项目中使用Quartz
Quartz也常用在Web应用中,常见的是交由Spring托管的形式,但这里并非介绍这个。如果你的很老的一个项目没有使用Spring呢? 这里我们介绍Quartz在Web应用中单独使用的场景。
小小工匠
2021/08/17
6820
极光推送maven与代码,无需修改,粘贴即用
maven: <!-- 极光推送 --> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.3.10</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jiguang-common</artifactId> <version
红目香薰
2022/11/28
4810
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
最近在学习Spring+SpringMVC+MyBatis的整合。以下是参考网上的资料自己实践操作的详细步骤。
Java架构师必看
2021/12/19
2.5K0
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
zk分布式任务管理
在我们的系统开发过程 中不可避免的会使用到定时任务的功能,而当我们在生产环境部署的服务超过1台时,就需要考虑任务调度的问题,防止两台或多台服务器上执行同一个任务,这个问题今天咱们就用zookeeper来解决。
写代码的猿
2019/05/07
1.4K0
zk分布式任务管理
【消息中间件】异常和死信消息们的浪浪山
新建项目rabbitmqdemo02,新建模块producer-springboot
半旧518
2023/10/17
3210
【消息中间件】异常和死信消息们的浪浪山
Java普通Maven项目如何使用logback日志
在前段时间,写了一个简单的Java项目,就是普通的Maven项目,没有使用到Spring,简简单单帮我处理了批量下载文件的事情。
半月无霜
2025/01/22
4060
推荐阅读
相关推荐
kettle工具使用及集成[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验