我正在使用Spring MVC开发一个Web应用程序。简而言之,用户上传的文件可以是不同类型的文件(.csv,.xls,.txt,.xml),应用程序会解析该文件并提取数据以供进一步处理。问题是我的文件格式可能经常更改。因此,必须有一些方法可以快速轻松地进行自定义。对Talend有点熟悉,我决定尝试一下,并将其用作我的应用程序的ETL工具。这个简短的教程展示了如何在Java应用程序中运行Talend作业 - http://www.talendforge.org/forum/viewtopic.php?id=2901 但是,使用Talend创建的作业可以读取/写入物理文件,目录或数据库。是否可以修改Talend作业,以便可以将一些Java对象作为参数,然后像通常的Java方法一样返回Java对象? 例如:
String[] param = new String[]{"John Doe"};
String talendJobOutput = teaPot.myjob_0_1.myJob.main(param);
其中teaPot.myjob_0_1.myJob是集成到我的应用程序中的talend作业
答案 0 :(得分:2)
要传递任意java对象,您可以使用每个talend作业中存在的以下方法:
public Object getValueObject() {
return this.valueObject;
}
public void setValueObject(Object valueObject) {
this.valueObject = valueObject;
}
在你的工作中你必须施放这个物体。例如您可以放入HashMaps列表并使用Java反射来填充行。使用tJavaFlex或自定义组件。
使用此方法,我可以在Talend中直观地调整数据的映射,但仍然将生成的代码用作我的java应用程序中的库。
答案 1 :(得分:1)
现在我更了解你的意愿,我认为这是不可能的,因为Talend的架构就像一个独立的应用程序,只有Java main()方法的“主要”入口点:
public String[][] runJob(String[] args) {
int exitCode = runJobInTOS(args);
String[][] bufferValue = new String[][] { { Integer.toString(exitCode) } };
return bufferValue;
}
也就是说:Talend执行入口点只接受 String数组作为输入,并且不会返回任何内容作为输出(作为系统返回码除外)
因此,您无法将Talend(生成的)代码链接为库,而是作为隔离工具,您只能在启动之前参数化(使用上下文变量,查看我的其他响应)
您可以看到,在Talend帮助中心或论坛中,所描述的唯一集成是“外部”作业执行......:
Talend knowledge base "Calling a Talend Job from an external Java application" article
Talend Community Forum "Java Object to Talend" topic
如果您想将Talend用作ETL工具,可能需要重新考虑应用程序的体系结构。
答案 2 :(得分:1)
现在从 Talend ETL 的角度来看:如果你想参数你的作业的执行环境(例如上传文件的物理目录),你应该使用上下文变量< / em>可以在执行时从配置文件加载,如下所述: https://help.talend.com/display/TalendOpenStudioforDataIntegrationUserGuide53EN/2.6.6+Context+settings