Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动

2023-11-19

背景

最近项目上需要java调用kettle实现ETL逻辑,所以找度娘看了看kettle相关的知识,刚开始写了个demo项目,见参考文档。在demo上能正常调用ktr文件,所以就转移到了项目中,结果发现项目中使用的是8.0.13的mysql驱动包,而kettle默认使用5.x版本的,网上的都是kettle如何配置使用8.0版本的mysql驱动,没有java调用如何配置的,所以这里写下。

实现

在Kettle设置数据库连接时,不选择MySQL,而选择Generic database的连接类型,如下:
在这里插入图片描述

该连接类型为自定义数据库URL,一看便知,此时和Java定义数据连接时几乎一致,所以填写自定义连接URL,自定义驱动名称即可,这里需要注意的是,8.0+版本的MySQL在连接时需要指定时区,这是上述两个版本的连接url不一致的原因,而class类文件的路径也略有不同,稍作注意即可。

使用自定义连接,终于在使用8.0+jar包的同时,正确连接到了数据库。

效果

  1. 使用这种方式能看的ktr文件里的数据库链接方式发生了改变
    在这里插入图片描述

  2. 此时通过java调用ktr就没有问题了
    在这里插入图片描述

附录

  1. kettle需要的jar如下:
<dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-vfs2</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.1-jre</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>



        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>

      <!--  <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

        <!--kettle需要手动引入的三个包-->
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-core</artifactId>
            <version>8.2.0.0-342</version>
        </dependency>
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-engine</artifactId>
            <version>8.2.0.0-342</version>
        </dependency>
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>metastore</artifactId>
            <version>8.2.0.0-342</version>
        </dependency>
    </dependencies>
  1. 代码:
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

/**
 * @author lang
 * @date 2020/3/17 17:12
 */
public class Main {


    public static void main(String[] args) {
        String jobname = "G:\\kettle\\SAP_OOB_UPLOAD.ktr";
        Main.runTrans(jobname);

    }



    public static void runTrans(String filename) {
        try {
            KettleEnvironment.init();
            TransMeta transMeta = new TransMeta(filename);
            Trans trans = new Trans(transMeta);
            trans.setParameterValue("month_id", "202003");
            trans.prepareExecution(null);
            trans.startThreads();
            //等待执行完毕
            trans.waitUntilFinished();

            if (trans.getErrors() != 0) {
                System.out.println("Error");
            }
        } catch (KettleXMLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (KettleException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

参考文档

搭建demo:
https://blog.csdn.net/lovePaul77/article/details/89740087
解决java调用kettle使用8.0.x驱动的启发路径 :
https://www.jianshu.com/p/613dbbd8b577

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动 的相关文章

  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 选择获取与 MySQL Group 中 max 对应的整行

    当我使用Max使用后查找特定 MySQL 组中字段的最大值GROUP BY 是否可以获取包含最大值的整行 我在处理一些论坛代码时偶然发现了这个线程 我想获取每个线程的最新帖子并将其显示在特定板的线程列表中 Quassnoi上面的回答对我非常
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文

随机推荐

  • 云原生热门话题|什么是可观测性-Observability

    code杂坛 关注一线大厂 互联网时讯 各技术栈 产品 开源社区 等最新讯息 1 可观测性引入 可观测性 术语源于几十年前的控制理论 在许多实际问题中 控制系统的状态变量不是由直接测量得到的 而是通过某种观测方法得到的 由某种观测系统所得到
  • 深大自考本科所需课程

    自考本科需要通过课程 网络经济与企业管理 数据结构导论 运筹学基础 信息资源管理 中国近代史纲要 计算机原理 马克思主义基本原理概论 数据库系统原理 管理经济学 软件开发工具 C 程序设计 英语2 操作系统概论 管理信息系统 计算机网络原理
  • 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)

    GetCircle cpp 定义控制台应用程序的入口点 圆形检测代码demo 载入数张包含各种形状的图片 检测出其中的圆形 include cv h include highgui h include
  • 排队论(Queuing Theory)

    目录 简介 一 基本概念 1 1 排队过程的一般表示 1 2 排队系统的组成和特征 1 2 1 输入过程 1 2 2 排队规则 1 2 3 服务过程 1 3 排队模型的符号表示 1 4 排队系统的运行指标 二 输入过程与服务时间的分布 2
  • 【MySQL】—— 在windows下的MySQL安装与配置

    更新日志 2020 11 13 文章发布 说明 本文地址 MySQL 在windows下的MySQL安装与配置 https blog csdn net maixiaochai article details 109676520 关于 Mai
  • 2FSK调制解调实验

    一 2FSK原理 频移键控是利用载波的频率变化来传递数字信息 数字频率调制是数据通信中使用较 早的一种通信方式 由于这种调制解调方式容易实现 抗噪声和抗衰减性能较强 因此在 中低速数字通信系统中得到了较为广泛的应用 在2FSK中 载波的频率
  • 树与二叉树(二叉树的表示,性质,遍历,还原)

    1 基本术语 A 或B 是I的祖先 I是A 或B 的子孙 D是I的双亲 I是D的孩子 节点的孩子个数称为节点的度 树中节点的最大度数称为树的度 度大于0的节点称为分支节点 度等于0的节点称为叶节点 定义树根为第一层 则 树的深度 高度 为5
  • 数据库开发三:JDBC数据库开发入门三(PrepareStatement的使用及预处理原理)

    目录 一PrepareStatement使用 二预处理原理 文章相关视频出处 https developer aliyun com lesson 1694 13598 spm 5176 10731542 0 0 4a023fdbjxoV5w
  • Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法)

    Java准确获取Word Excel PPT PDF的页数 附Word页数读不准的处理办法 1 需求背景 2 环境准备工作 2 1 JACOB介绍及安装 2 2 Microsoft Office Word的设置 3 代码 3 1 代码示例
  • Python实现“鸟脸识别”系统,看看什么鸟最贪吃~ 初学者也能学会

    梦晨 发自 凹非寺 量子位 报道 公众号 QbitAI 网友cldud1245是一个鸟类爱好者 以下简称喂鸟哥 最近打算自学Python 拥有其他语言编程经验的他 可不打算按部就班从Hello World做起 一上来就挑战图像识别 他用一个
  • 数学建模的六个步骤

    一 模型准备 了解问题的实际背景 明确其实际意义 掌握对象的各种信息 以数学思路来解释问题的精髓 数学思路贯彻问题的全过程 进而用数学语言来描述问题 要求符合数学理论 符合数学习惯 清晰准确 理解实际问题后 搜集资料 快速阅读和理解参考文献
  • 神经网络编程技巧(一):两个矩阵相乘报错,np.random.randn(5,)不是矩阵,np.random.randn(5,1)才能得到1*5的矩阵,np.dot()函数

    np dot函数主要用于向量的点积和矩阵的乘法 格式如下np dot a b 其中a b均为n维向量 具体例子参考下面的代码及其结果 在神经网络中经常使用这个函数 能够节约大量的时间 原来复杂的公式在编程时只需要这一行代码即可实现 在编写p
  • Qt实现Excel读写

    QtXlsx 是 第三方的Qt库 为Qt程序提供读写Excel的接口 不单单是Microsoft Excel 它可以用于任何Qt支持的平台 相比Qt官方的QAxObject QtXlsx提供的接口封装层次更高 使用更加简便 github主页
  • LeetCode 933. 最近的请求次数

    写一个 RecentCounter 类来计算特定时间范围内最近的请求 请你实现 RecentCounter 类 RecentCounter 初始化计数器 请求数为 0 int ping int t 在时间 t 添加一个新请求 其中 t 表示
  • 存储计划:自动kill掉死锁进程id

    CREATE PROCEDURE dbo sp who lock1116 AS exec sp who lock1116 begin declare spid int bl int intTransactionCountOnEntry in
  • 结构体封装(C语言)

    转自 http blog jobbole com 57822 我也不理会失不失落 只是对结构体封装技术感兴趣 目录 1 谁该阅读这篇文章 2 我为什么写这篇文章 3 对齐要求 4 填充 5 结构体对齐及填充 6 结构体重排序 7 难以处理的
  • suggest ajax,高仿google suggest ajax示例

    搜索提示框 var obj div 提示层对象 var obj input 输入框对象 var main delay 判断值变化延迟对象 var ajax delay ajax延迟搜索对象 var updown delay 方向键延迟对象
  • 13. 机器人正运动学---雅克比矩阵(1)

    目录 1 引言 2 雅克比矩阵 3 机器人雅克比矩阵 4 求解雅克比矩阵 4 1 几何法 1 引言 前面的一些文章我们一直对机器人进行静态分析 也就是给定一组关节角求机器人末端位姿 这篇文章我们来分析一下关节角的运动将怎样影响机器人末端的位
  • 全国大学生算法设计与编程挑战赛 (秋季赛)——正式赛

    染方块 color Description 现在有一个 n times nn n 的方格 每一个格子是红块 X 绿块 O 或者空白块 而你可以把空白块染成红色 在你对你想染色的空白块进行染色之后 方格会有这样的变化 如果一个绿色块上下左右都
  • Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动

    来个目录吧 背景 实现 效果 附录 参考文档 背景 最近项目上需要java调用kettle实现ETL逻辑 所以找度娘看了看kettle相关的知识 刚开始写了个demo项目 见参考文档 在demo上能正常调用ktr文件 所以就转移到了项目中