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();
}
源于:
该代码示例展示了如何在Java中使用Kettle环境初始化,创建并配置数据库连接,执行SQL查询。通过TableInputMeta类进行表输入操作,读取数据并添加监听器收集输出数据。最后,代码还提供了预览转换执行和将转换保存为KTR文件的功能。

4202

被折叠的 条评论
为什么被折叠?



