在Java应用程序中运行Talend作业

在Java应用程序中运行Talend作业,java,talend,Java,Talend,我正在使用SpringMVC开发一个web应用程序。简单地说,用户上传一个不同类型的文件(.csv、.xls、.txt、.xml),应用程序解析该文件并提取数据以供进一步处理。问题是文件的格式可能会经常更改。因此,必须有一些快速、简便的定制方法。由于对Talend有点熟悉,我决定尝试一下,并将其用作我的应用程序的ETL工具。本简短教程介绍如何在Java应用程序中运行Talend作业- 但是,使用Talend创建的作业可以读取/写入物理文件、目录或数据库。是否可以修改Talend作业,以便将一些J

我正在使用SpringMVC开发一个web应用程序。简单地说,用户上传一个不同类型的文件(.csv、.xls、.txt、.xml),应用程序解析该文件并提取数据以供进一步处理。问题是文件的格式可能会经常更改。因此,必须有一些快速、简便的定制方法。由于对Talend有点熟悉,我决定尝试一下,并将其用作我的应用程序的ETL工具。本简短教程介绍如何在Java应用程序中运行Talend作业- 但是,使用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作业

现在我更好地理解了您的意愿,我认为这是不可能的,因为talend的体系结构类似于一个独立的应用程序,只有一个“main”入口点,就像Java main()方法一样:

也就是说:Talend执行入口点只接受字符串数组作为输入,不将任何内容作为输出(系统返回代码除外)

因此,您无法将Talend(生成的)代码链接为库,而是作为一个独立的工具,在启动之前只能参数化(使用上下文变量,请参阅我的其他响应)

您可以看到,在Talend帮助中心或论坛中,描述的唯一集成是“外部”作业执行…:


如果您想将Talend用作ETL工具,您可能需要重新考虑应用程序的体系结构。

现在我更好地理解您的意愿,我认为这是不可能的,因为Talend的体系结构类似于一个独立的应用程序,只有一个“main”入口点,就像Java main()方法一样:

也就是说:Talend执行入口点只接受字符串数组作为输入,不将任何内容作为输出(系统返回代码除外)

因此,您无法将Talend(生成的)代码链接为库,而是作为一个独立的工具,在启动之前只能参数化(使用上下文变量,请参阅我的其他响应)

您可以看到,在Talend帮助中心或论坛中,描述的唯一集成是“外部”作业执行…:


如果您想将Talend用作ETL工具,您可能需要重新考虑应用程序的体系结构。

现在从Talend ETL的角度来看:如果您想参数化作业的执行环境(例如上载文件的物理目录),您应该使用可以在执行时从配置文件加载的上下文变量,如下所述:

现在从Talend ETL的角度来看:如果您想参数化作业的执行环境(例如上载文件的物理目录),您应该使用可以在执行时从配置文件加载的上下文变量,如下所述:
我想我也做了类似的事情。我使用tMap在tallend中创建了一个映射,并将其导出为talend作业(JavaSE程序)。如果包含该作业的库,则可以按照其他人的描述运行talend作业

要传递任意java对象,可以使用每个talend作业中存在的以下方法:

public Object getValueObject() {
    return this.valueObject;
}

public void setValueObject(Object valueObject) {
    this.valueObject = valueObject;
}
在你的工作中,你必须投射这个物体。e、 您可以放入一个HashMaps列表,并使用Java反射来填充行。为此,请使用tJavaFlex或自定义组件


使用此方法,我可以在Talend中直观地调整数据的映射,但仍然在java应用程序中使用生成的代码作为库。

我想我也做了类似的事情。我使用tMap在tallend中创建了一个映射,并将其导出为talend作业(JavaSE程序)。如果包含该作业的库,则可以按照其他人的描述运行talend作业

要传递任意java对象,可以使用每个talend作业中存在的以下方法:

public Object getValueObject() {
    return this.valueObject;
}

public void setValueObject(Object valueObject) {
    this.valueObject = valueObject;
}
在你的工作中,你必须投射这个物体。e、 您可以放入一个HashMaps列表,并使用Java反射来填充行。为此,请使用tJavaFlex或自定义组件


使用此方法,我可以在Talend中直观地调整数据的映射,但仍将生成的代码用作java应用程序中的库。

我知道。但是,我希望将Java对象作为参数传递给Talend作业。不是字符串参数。由于某些限制,我也无法传递物理文件。所以,我想传递一个对象。例如ArrayList)我知道。但是,我希望将Java对象作为参数传递给Talend作业。不是字符串参数。由于某些限制,我也无法传递物理文件。所以,我想传递一个对象。例如ArrayList)