美文网首页
kettle8.0源码编译

kettle8.0源码编译

作者: paopaodaxia | 来源:发表于2018-09-19 15:20 被阅读0次

    kettle作为一款开源etl工具,在数据仓库领域的应用还算是比较广泛的,做过数仓的朋友应该都知道,在做etl开发的时候,对于参数变量的引用是时常出现的场景,对于一些公共的变量,kettle的做法是启动的时候默认读取用户目录下一个kettle.properties文件,这种做法维护起来不是特别方便,如果服务器有多台每次新增变量,每台服务器都需要维护,为了解决这个问题,可以通过修改kettle源码从数据库读取达到目的。

    源码编译步骤(本文采用idea工具编译)

    • 工具下载:
      kettle源码下载:https://github.com/pentaho/pentaho-kettle/tree/8.0.0.0-R
      kettle客户端下载:https://sourceforge.net/projects/pentaho/files
      maven下载:http://maven.apache.org/download.cgi

    • idea导入工程
      解压下好的源码,idea选择源码目录pom.xml


      image.png

      打开UI模块,修改swt的maven地址为org.eclipse.swt.win32.win32.x86_64,不然会报错,因为默认引用的是Linux的jar包,我们换成Windows的


      image.png
      然后将客户端里的目录data-integration\ui下的文件复制到工程的pentaho-kettle-8.0.0.0-R\ui\src\main\resources\ui目录下,这里是一些资源文件
      等待idea自动导入依赖jar包。。。。。
    • 启动Spoon.java类
      kettle的启动类是org.pentaho.di.ui.spoon.Spoon,这时候启动这个类不出意外kettle的界面就出来了


      image.png
    • 修改源码
      找到类org.pentaho.di.core.util.EnvUtil
      environmentInit这个方法会读取kettle.properties配置文件加载到kettle全局变量
      源码如下:

    Map<Object, Object> kettleProperties = EnvUtil.readProperties( Const.KETTLE_PROPERTIES );
    insertDefaultValues( kettleProperties );
    applyKettleProperties( kettleProperties );
    

    我们添加一个方法,调用一次就OK了:

    private static void getMysqlParam() {
        Properties pro = new Properties();
        String key = "";
        String value = "";
        try {
          Class.forName("com.mysql.jdbc.Driver");
          Connection conn = DriverManager.getConnection(
                  "jdbc:mysql://xx.xx.xx.xx/xx?useUnicode=true&characterEncoding=utf8",
                  "xxxx", "xxxxxx");
          Statement stat = conn.createStatement();
          ResultSet rst = stat.executeQuery("select t.key,t.value from table t ");
          while (rst.next()) {
            key = rst.getString(1);
            value = rst.getString(2);
            //System.out.println(key + "---->" + value);
            pro.put(key, value);
          }
          insertDefaultValues(pro);
          applyKettleProperties(pro);
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
        } catch (SQLException e) {
          e.printStackTrace();
        }
    
      }
    
    • maven打包
      到项目所在目录执行命令

    mvn clean install --settings C:\Users\xn043275.m2\settings.xml -Dmaven.test.skip=true

    生成的目标文件路径在pentaho-kettle-8.0.0.0-R\assemblies\pdi-ce\target

    分享就到这里,谢谢大家!

    相关文章

      网友评论

          本文标题:kettle8.0源码编译

          本文链接:https://www.haomeiwen.com/subject/vvdinftx.html