java集成kettle:配置资源库,并执行资源库中保存的转换

首先配置资源库

1.安装kettle7.1

2.将mysql-connector-java-5.1.46.jar复制到D:\Program Files\kettle7.1\data-integration\lib目录下

3.配置kettle资源库

java集成kettle:配置资源库,并执行资源库中保存的转换_第1张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第2张图片

 java集成kettle:配置资源库,并执行资源库中保存的转换_第3张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第4张图片

 java集成kettle:配置资源库,并执行资源库中保存的转换_第5张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第6张图片

 java集成kettle:配置资源库,并执行资源库中保存的转换_第7张图片

 java集成kettle:配置资源库,并执行资源库中保存的转换_第8张图片

上图就是在cgmrepositorydb数据库中初始化建立表格呢。需要建立1分钟左右。 

java集成kettle:配置资源库,并执行资源库中保存的转换_第9张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第10张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第11张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第12张图片

密码也是admin 

java集成kettle:配置资源库,并执行资源库中保存的转换_第13张图片

 

然后我们创建一个名称为fromto的转换

java集成kettle:配置资源库,并执行资源库中保存的转换_第14张图片

输入就是D:/from.txt 输出就是D:/to.txt

 那么这个转换就在数据库中了  

java集成kettle:配置资源库,并执行资源库中保存的转换_第15张图片

 在数据库中的结构如下:

java集成kettle:配置资源库,并执行资源库中保存的转换_第16张图片

 那么如何以树形目录结构查询fromto转换在哪里呢? 

java集成kettle:配置资源库,并执行资源库中保存的转换_第17张图片

java集成kettle:配置资源库,并执行资源库中保存的转换_第18张图片

 发现fromto在根目录下。因为fromto转换在数据块中的ID_DIRECTORY=0

 

 现在我们要使用java代码去读取kettle资源数据库中存储的fromto转换,并执行这个换行

项目结构如下

java集成kettle:配置资源库,并执行资源库中保存的转换_第19张图片

 pom.xml文件如下

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0
    www.test.com
    test
    0.0.1-SNAPSHOT

    
        
            pentaho-kettle
            kettle-core
            7.1.0.0-12
        

        
            pentaho-kettle
            kettle-dbdialog
            7.1.0.0-12
        

        
            pentaho-kettle
            kettle-engine
            7.1.0.0-12
        

        
            pentaho
            metastore
            7.1.0.0-12
        

        
        
            org.apache.commons
            commons-vfs2
            2.2
        

        
            com.google.guava
            guava
            19.0
        

        
            mysql
            mysql-connector-java
            5.1.46
        

        
        
            commons-lang
            commons-lang
            2.6
        

    
    
        
            pentaho-releases
            Kettle
            https://nexus.pentaho.org/content/groups/omni/
        

        
        
            public
            aliyun nexus
            http://maven.aliyun.com/nexus/content/groups/public/
            
                true
            

        

    

KettleTest文件如下

 

package test;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

/**
 * @author cgm
 * @date 2019年7月5日
 */
public class KettleTest {
    public static void main(String[] args) throws KettleException {

        KettleDatabaseRepository obj = RepositoryCon();
        if (obj != null) {// 资源库连接成功
            runTrans(obj, "fromto");// 调用指定的tansformation
        }
    }

    /**
     * 配置资源库环境 并接连接的资源库
     * 
     * @return
     * @throws KettleException
     */
    public static KettleDatabaseRepository RepositoryCon() throws KettleException {
        // 初始化
        KettleEnvironment.init();
        // 数据库连接元对象
        // (kettle数据库连接名称(KETTLE工具右上角显示),资源库类型,连接方式,IP,数据库名,端口,用户名,密码) //cgmRepositoryConn
        DatabaseMeta databaseMeta = new DatabaseMeta("cgmRepository", "mysql", "Native(JDBC)", "127.0.0.1",
            "cgmrepositorydb", "3306", "root", "root");
        // 数据库形式的资源库元对象
        KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta();
        kettleDatabaseRepositoryMeta.setConnection(databaseMeta);
        // 数据库形式的资源库对象
        KettleDatabaseRepository kettleDatabaseRepository = new KettleDatabaseRepository();
        // 用资源库元对象初始化资源库对象
        kettleDatabaseRepository.init(kettleDatabaseRepositoryMeta);
        // 连接到资源库
        kettleDatabaseRepository.connect("admin", "admin");// 默认的连接资源库的用户名和密码
        if (kettleDatabaseRepository.isConnected()) {
            System.out.println("连接成功");
            return kettleDatabaseRepository;
        } else {
            System.out.println("连接失败");
            return null;
        }
    }

    /**
     * 调用Transformation示例
     * 
     * @param rep
     * @param transName
     */
    public static void runTrans(KettleDatabaseRepository rep, String transName) {

        try {
            // 根据指定的字符串路径 找到目录,在 r_transformation中id_directory=0的代表根目录
            RepositoryDirectoryInterface dir = rep.findDirectory("/");
            // 根据转换名称获取转换id
            // 这个值就是从SELECT ID_TRANSFORMATION FROM `r_transformation` where name='fromto';来的
            ObjectId id = rep.getTransformationID(transName, dir);
            System.out.println("------ObjectId=" + id);
            // 根据转换id查询与其关联的step和hop
            // select name from r_step where ID_STEP=(SELECT ID_STEP_FROM FROM `r_trans_hop` where
            // ID_TRANSFORMATION='1');
            // select name from r_step where ID_STEP=(SELECT ID_STEP_TO FROM `r_trans_hop` where ID_TRANSFORMATION='1');
            TransMeta transMeta = rep.loadTransformation(id, null);
            //
            Trans trans = new Trans(transMeta);
            trans.execute(null);// 执行转换
            trans.waitUntilFinished(); // 等待转换执行结束
            if (trans.getErrors() != 0) {
                System.out.println("Error");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
 

运行结果如下:

java集成kettle:配置资源库,并执行资源库中保存的转换_第20张图片

 发现D:/to.txt中文件内容和D:/from.txt内容一致

代码示例: https://download.csdn.net/download/cgm625637391/11289885 

 

 

 

你可能感兴趣的:(java集成kettle:配置资源库,并执行资源库中保存的转换)