Java 集成 Kettle 运行ktr获取某个step结束后的数据

该代码示例展示了如何在Java中使用Kettle环境初始化,创建并配置数据库连接,执行SQL查询。通过TableInputMeta类进行表输入操作,读取数据并添加监听器收集输出数据。最后,代码还提供了预览转换执行和将转换保存为KTR文件的功能。
public static final String[] databasesXML = {
		"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<connection>" + "<name>test</name>"
			+ "<server>127.0.0.1</server>" + "<type>MYSQL</type>" + "<access>Native</access>"
			+ "<database>test</database>" + "<port>3306</port>" + "<username>root</username>"
			+ "<password>root</password>" + "<attributes>" + "<attribute>"
			+ "<code>EXTRA_OPTION_MYSQL.serverTimezone</code>" + "<attribute>Hongkong</attribute>"
			+ "</attribute>" + "</attributes>" + "</connection>"};

用java创建的transMeta所需要的数据库连接配置

try {
			KettleEnvironment.init();
			TransMeta meta = new TransMeta();
			meta.setName("test");
			for (String s : databasesXML) {
				DatabaseMeta databaseMeta = new DatabaseMeta(s);
				meta.addDatabase(databaseMeta);
			}
			PluginRegistry registry = PluginRegistry.getInstance();

			//表输入
			TableInputMeta tableInput = new TableInputMeta();
			String tableInputPluginId = registry.getPluginId(StepPluginType.class, tableInput);
			//表输入添加数据库连接
			DatabaseMeta database_test = meta.findDatabase("test");
			tableInput.setDatabaseMeta(database_test);
			tableInput.setSQL("select * from test_1");
			//添加表输入到转换中
			StepMeta test_1_input = new StepMeta(tableInputPluginId, "test_1_input", tableInput);
			test_1_input.setDraw(true);
			test_1_input.setLocation(100,100);
			meta.addStep(test_1_input);

            //创建Trans 转换类
			Trans trans = new Trans(meta);
			trans.setPreview(true);
            //转换流程预运行
			trans.prepareExecution(null);
            //创建接收数据的列表
			List<RowMetaAndData> rowMetaAndData = new ArrayList<>();
            //循环转换流的节点,找到需要获取数据的节点,添加监听器,将数据写入到上面创建的列表
			trans.getSteps().stream().filter(c -> c.step.getStepname().equals("test_1_input"))
				.findFirst()
				.ifPresent(c -> c.step.addRowListener(new RowAdapter(){
					@Override
					public void rowWrittenEvent( RowMetaInterface rowMeta, Object[] row ) {
						rowMetaAndData.add( new RowMetaAndData( rowMeta, row ) );
					}
				}));
           
			trans.startThreads();
			trans.waitUntilFinished();
			System.out.println(rowMetaAndData);

// 生成ktr文件至本地
//			String transXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n" + meta.getXML();
//			String transName = "C:\\xxx\\xxx.ktr";
//			File file = new File(transName);
//			FileUtil.writeString(file,transXml,"UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}

 源于:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值