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

kettle工具中嵌入java代码_kettle设置变量Java调用Kettle工具方法/***Java调用Kettle工具类**@classnameKettleUtil*@date2020/3/2416:24*/publicfinalclassKettleUtil{privatestaticfinalLoggerlog=LoggerFactory.getLogger(KettleUt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Java调用Kettle工具方法

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

<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

/** * 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.net/181330.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 伽马分布与贝塔分布转换关系_伽马分布期望推导

    伽马分布与贝塔分布转换关系_伽马分布期望推导伽马函数称为伽马函数,其中参数,伽马函数具有如下性质: ,n为自然数;或写作余元公式:对于,有与贝塔函数的关系: 对于;伽马函数是严格凹函数。 x足够大时,可以用Stirling公式来计算Gamma函数值:伽马分布背景:若一个元器件能抵挡一些外来冲击,但遇到第k次冲击即告失效,则第k次冲击来到的时间X(寿…

    2025年5月26日
    1
  • matlab矩阵求逆矩阵非方阵_matlab验证逆矩阵出问题

    matlab矩阵求逆矩阵非方阵_matlab验证逆矩阵出问题matlab矩阵求逆矩阵因为所以该矩阵可逆,根据,其中得到计算矩阵A每个元素的代数余子式:所以可得:matlab计算如下:>>A1=[122;21-2;2-2

    2022年8月3日
    3
  • 在Linux系统中安装pycharm详解

    在Linux系统中安装pycharm详解1 在官网下载 pycharm 安装包 1 1 进入官网 DownloadPyCh PythonIDEfor 选择 Professional 专业版 直接下载 自己可以选择 pycharm 的不同版本 1 2 进入跳转页面后 出现提示框 点 savefile 1 3 下载完成后 打开安装包下载的位置 2 安装 pycharm2 1 解压文件 2 打开终端 进入 pych

    2025年6月20日
    0
  • 使用腾讯云直播开发直播功能违法吗_腾讯云直播插件

    使用腾讯云直播开发直播功能违法吗_腾讯云直播插件前言:最近公司开发app直播功能,我是后端,使用java开发,经过考虑选择使用腾讯的云直播功能,主要是考虑到腾讯在这方面可以说是很有实力的了。然后就是选择产品的问题,腾讯提供了几种直播的解决方案,最完整的是互动直播,这是一套比较完善的直播解决方案,但是费用比较贵,所以。。。我们选择了云直播和云通信(IM)组合,主要是因为本来app中就集成云通信,也就是云直播用来做视频交互,云通信用来做弹幕和直…

    2022年9月15日
    1
  • Android数据库加密

    Android数据库加密Android数据库加密一、简介SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的读写效率、资源消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如Android、iOS)。Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作,具体就不详细说明了。然而,Android平台自带的SQLite有一个致命的缺陷:…

    2022年5月13日
    40
  • 华为裁员34岁以上程序员,90后的中年危机,即将在职场引爆

    华为裁员34岁以上程序员,90后的中年危机,即将在职场引爆去年,一条职场潜规则走红网络:不要大声责骂年轻人,他们会立刻辞职的,但是你可以往死里骂那些中年人,尤其是有车有房有娃的那些。真实感受到程序员的中年危机在中国,除了从BAT出来的牛人,一般经理层到35岁,总监层到40岁,往后机会真的会少很多了,不是你能不能干的问题,是别人不给机会你干的问题,不要想着什么外国人可以干到50、60,你就要死磕到底,希望后来者早有打算,不要到最后尴尬的时…

    2022年7月17日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号