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

来个目录吧

  • 背景
  • 实现
  • 效果
  • 附录
  • 参考文档

背景

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

实现

在Kettle设置数据库连接时,不选择MySQL,而选择Generic database的连接类型,如下:
Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动_第1张图片

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

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

效果

  1. 使用这种方式能看的ktr文件里的数据库链接方式发生了改变
    Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动_第2张图片

  2. 此时通过java调用ktr就没有问题了
    Java调用kettle实现ETL功能:使用mysql8.0.x版本的驱动_第3张图片

附录

  1. kettle需要的jar如下:

        
            org.apache.commons
            commons-vfs2
            2.1
        

        
        
            com.google.guava
            guava
            27.1-jre
        

        
            commons-io
            commons-io
            2.2
        

        
        
            commons-lang
            commons-lang
            2.6
        

        
        
            cn.hutool
            hutool-all
            4.5.6
        

        
            org.slf4j
            slf4j-api
            1.7.7
        


        
        
            org.slf4j
            slf4j-log4j12
            1.7.7
        

        
            commons-codec
            commons-codec
            1.10
        



        
            org.apache.poi
            poi-ooxml
            3.17
        
        
            org.apache.poi
            poi-ooxml-schemas
            3.17
        
        
            org.apache.poi
            poi
            3.17
        

        
            org.apache.xmlbeans
            xmlbeans
            2.6.0
        
        
            org.dom4j
            dom4j
            2.1.1
        

        
        
            net.sourceforge.jexcelapi
            jxl
            2.6.12
        

      
        
            mysql
            mysql-connector-java
            8.0.13
        

        
        
            pentaho-kettle
            kettle-core
            8.2.0.0-342
        
        
            pentaho-kettle
            kettle-engine
            8.2.0.0-342
        
        
            pentaho-kettle
            metastore
            8.2.0.0-342
        
    
  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

你可能感兴趣的:(ETL,mysql,JAVA-KETTLE)