【问题标题】:Running Talend Job from within Java application从 Java 应用程序中运行 Talend Job
【发布时间】:2013-09-10 09:04:02
【问题描述】:

我正在使用 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 工作

【问题讨论】:

    标签: java talend


    【解决方案1】:

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

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

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

    在你的工作中,你必须铸造这个物体。例如您可以放入一个 HashMap 列表并使用 Java 反射来填充行。为此使用 tJavaFlex 或自定义组件。

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

    【讨论】:

      【解决方案2】:

      现在我更好地理解了你的意愿,我认为这是不可能的,因为 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 工具用于您的目的,您可能需要重新考虑应用程序的架构。

      【讨论】:

      • 我知道。但是,我想将 Java 对象作为参数传递给 Talend 作业。不是字符串参数。由于一些限制,我也无法传递物理文件。所以,我想传递一个对象。例如 ArrayList )
      【解决方案3】:

      现在从Talend ETL的角度来看:如果你想参数化你的作业的执行环境(例如上传文件的物理目录),你应该使用上下文变量 可以在执行时从配置文件中加载,如下所述: https://help.talend.com/display/TalendOpenStudioforDataIntegrationUserGuide53EN/2.6.6+Context+settings

      【讨论】:

        猜你喜欢
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多