【问题标题】:How to pass arguments to composed task from scdf shell?如何从 scdf shell 将参数传递给组合任务?
【发布时间】:2019-06-21 02:21:11
【问题描述】:

我正在尝试通过 scdf shell 启动组合任务。参数未正确传递给子任务

组合任务定义:

组合任务 --graph='app1 && app2'

从 shell 启动的命令:

任务启动组合任务名称 --arguments "--name=test"

参数在组合任务 jar 中传递和执行,而不是在子任务中传递并执行失败。在使用 Web UI 时,有一个名为composed-task-arguments 的选项将参数识别为子任务的参数。

Web UI 中的组合任务定义:

composed-task --graph='app1 && app2' --composed-task-arguments ='--name=test'

--composed-task-arguments 在数据外壳中无法识别。只有 --arguments 有效。如何仅将参数从数据外壳传递给子任务?

【问题讨论】:

    标签: spring-cloud spring-cloud-dataflow


    【解决方案1】:

    Launching a Composed Task 部分明确介绍了何时需要将属性和参数从 Shell 传递给子任务的场景。

    特别是要将任意参数传递给子任务,您仍然必须使用--arugments 属性,但值将通过composed-task-arguments 属性传递。这是一个例子。

    创建:

    dataflow:>task create composition-task --definition "t1: timestamp && t2: timestamp"

    启动:

    数据流:>任务启动组合任务--arguments“--composed-task-arguments=foo=one bar=two”

    通过此任务启动,t1t2 任务都应该在运行时收到“foo=one”和“bar=two”属性。

    【讨论】:

    • composed-task-arguments 是一个属性,因此我需要使用 --properties "app.composed-task-name.composed-task-arguments=foo=one"。但我无法传递多个参数,例如“app.composed-task-name.composed-task-arguments=foo=one,bar=two”。这个link 表示可以将参数作为 csv 传递
    • 应提供多个参数,分隔符为空格。因此,您必须将它们作为 foo=one bar=two 而不是 , 分隔符传递。随时在github.com/spring-cloud/spring-cloud-dataflow 上提出问题 - 我们可以通过一个示例来说明这一点。
    • 空格分隔符正在工作。但我发现了一个奇怪的行为。当我启动本地服务器并通过 shell 执行组合任务时,一切正常。但是当我第二次启动相同的组合任务时,spring-cloud-starter-task-composedtaskrunner-2.0.2.RELEASE.jar 失败并出现错误“无法找到或加载主类 jar”。任务的开始和结束时间在数据库中为空。如果我再次停止并重新启动服务器,它工作正常。请指教。
    • 是否可以为每个任务发送不同的参数?例如,foo=one 代表 t1bar=two 代表 t2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2014-08-23
    • 2018-10-19
    相关资源
    最近更新 更多