168大数据

标题: java调用kettle动态传参修改数据库连接 [打印本页]

作者: 乔帮主    时间: 2014-10-29 17:14
标题: java调用kettle动态传参修改数据库连接

感言:网络的确帮助了我们,随着开源系统使用日趋广泛,更多的企业选择kettle作为ETL工具,但是kettle的资料真实太少,英语学好是有必要的;

整体思路:创建javaproject→导入kettle所需要的包→实现kettle中的对象→重写对象内容→调用对象执行;

[Java] 纯文本查看 复制代码
package kettle;

//需要导入的包
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

import com.enfo.common.utils.StringUtils;




public class ExecuteLocalTran {
    /**
     * java调用本地的tran并且传递参数(包括给SQL传参和动态修改数据库连接)
     *
     *
     */
   public static void main(String arg[]) throws Exception
    {
      
       //前台页面传递的参数
       String idname="7";//作为参数值
       String filename="./test.ktr";//ktr路径
      
       String conn_name="output_dbconnection";
       String host_name="128.8.28.124";
       String db_name="TestWork";
       String db_port="1433";
       String user_name="wxj";
       String pass_word="wxj1988";
      
       KettleEnvironment.init();//初始化kettle环境
       TransMeta transMeta = new TransMeta(filename);//new tran的源数据对象
      
       //DatabaseMeta dm =transMeta.getDatabase(1);
       List<DatabaseMeta>  dmlist=transMeta.getDatabases();
       for(DatabaseMeta dm : dmlist)
           {
                String connection_name=StringUtils.trimNull(dm.getName());
                if(connection_name.equals(conn_name))
                {   
                    dm.setHostname(host_name); //连接地址
                    dm.setDBName(db_name); //数据库名称
                    dm.setDBPort(db_port); //端口
                    dm.setUsername(user_name); //用户
                    dm.setPassword(pass_word); //密码
                    /*
                    System.out.println("DatabaseMeta:"+dm.getName());
                    System.out.println("AccessType:"+dm.getAccessType());
                    System.out.println("DatabaseName:"+dm.getDatabaseName());
                    System.out.println("Hostname:"+dm.getHostname());
                    System.out.println("Username:"+dm.getUsername());
                    System.out.println("Password:"+dm.getPassword());
                    */
                 }
               
            }
       Trans trans = new Trans(transMeta);//创建tran对象
       trans.setVariable("namevalue",idname);//给对象传参
       trans.prepareExecution(null);//异常处理
       trans.startThreads();//开始执行
       trans.waitUntilFinished();//等待执行完毕
       if(trans.getErrors()!=0)
       {
           System.out.println("Error encountered!");
       }
    }

}

更多参考:http://javadoc.pentaho.com/kettle/








欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2