kettle学习(三)java调用kettle

一:java项目引用kettle相关jar包

<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>
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>scannotation</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>17.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-vfs2</artifactId>
            <version>2-2.2</version>
        </dependency>

说明:这些jar包都可以去kettle目录下的lib文件夹里面找到,然后安装到自己项目中
注意:不要用7.X的jar包,你会有意想不到的问题

二:连接数据库资源库

  /**
     * 配置资源库环境 并接连接的资源库
     * 
     * @return
     * @throws KettleException
     */
    public static KettleDatabaseRepository RepositoryCon(String etlname ,String dbtype ,String host,String dbname,String port ,String user ,String pass) throws KettleException {
        KettleEnvironment.init();
        // 数据库连接元对象
        // (kettle数据库连接名称(KETTLE工具右上角显示),资源库类型,连接方式,IP,数据库名,端口,用户名,密码) //cgmRepositoryConn
        DatabaseMeta databaseMeta = new DatabaseMeta(etlname, dbtype, "Native(JDBC)", host,
                dbname, port, user, pass);
        // 数据库形式的资源库元对象
        KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta();
        kettleDatabaseRepositoryMeta.setConnection(databaseMeta);
        // 数据库形式的资源库对象
        KettleDatabaseRepository kettleDatabaseRepository = new KettleDatabaseRepository();
        // 用资源库元对象初始化资源库对象
        kettleDatabaseRepository.init(kettleDatabaseRepositoryMeta);
        // 连接到资源库
        kettleDatabaseRepository.connect("admin", "admin");// 默认的连接资源库的用户名和密码
        if (kettleDatabaseRepository.isConnected()) {
            log.info("connect  etl sucess!");
            return kettleDatabaseRepository;
        } else {
            log.info("connect  etl fail!");
            return null;
        }
    }

三: 执行转换

    public Integer exteEtlKettlePlanJobByProjectName(EtlLog log, BiDataBaseConfig dataBaseConfig)throws Exception {
    int ret = 1;
    Trans trans =null;
    String sql = log.getSql().replace("\n", " ");
    //源库
    DataBaseConfig config= new DataBaseConfig(dataBaseConfig.getDatabaseHost(),dataBaseConfig.getDatabasePort(),dataBaseConfig.getDatabaseType(),dataBaseConfig.getDatabaseName(),dataBaseConfig.getDatabaseUser(),dataBaseConfig.getDatabasePass(), Constants.ETLFLAG_KETTLE);
    DataSourceHelp help= DataSourceHelp.getInstance(config);
    BasicDataSource source= (BasicDataSource) help.getDataSource();

    //连接资源库
    KettleDatabaseRepository rep = KettleUtil.RepositoryCon(etlname,dbtype,host,dbname,port,dbuser,dbpass);

    if(rep==null){
        logger.error("kettle资源库连接失败!");
        ret=9;
        return ret;
    }
    RepositoryDirectoryInterface dir = rep.findDirectory(log.getProjectname());
    ObjectId id = rep.getTransformationID(log.getJobname(), dir);
    TransMeta transMeta = rep.loadTransformation(id, null);
    trans = new Trans(transMeta);
    trans.setVariable("url",source.getUrl());
    trans.setVariable("driver",source.getDriverClassName());
    trans.setVariable("user",source.getUsername());
    trans.setVariable("password",source.getPassword());

    trans.setVariable("host",host);
    trans.setVariable("dbname",dbname);
    trans.setVariable("port",port);
    trans.setVariable("dbuser",dbuser);
    trans.setVariable("dbpass",dbpass);
    trans.setVariable("sql",sql);//传参
    trans.execute(null);// 执行转换
    trans.waitUntilFinished(); // 等待转换执行结束
    logger.info("trans status is: "+trans.getStatus());
    if (trans.getErrors() > 0) {
        ret=9;
    }
    logger.info("idbatch "+trans.getBatchId());
    REtlLog rEtlLog=rEtlLogMapper.selectREtlLog(trans.getBatchId());
    if(rEtlLog!=null){
        log.setRemark(rEtlLog.getLogField());
    }
    return ret;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值