我正在从普通的spring批处理迁移到spring云任务,并通过spring云数据流执行spring批处理。在我的工作和我为file injest部署的示例工作中,我都遇到了以下问题:
https://docs.spring.io/spring-cloud-dataflow-samples/docs/current/reference/htmlsingle/#_batch_file_ingest
我使用的是带有postgres后端的spring-cloud-dataflow-server-local-1.0.RELEASE。我还修改了该示例以使用postgres数据库。
当我尝试使用不同的参数再次运行该任务时,出现了问题。当我第一次运行它时:
task launch fileInjectTask --arguments "filePath=classpath:data.csv --spring.cloud.task.closecontext_enable=false"
以下是日志中的输出:
2018-03-22 10:10:51.446 INFO 10431---[main]o.s.b.a.b.JobLauncherCommandLineRunner:运行默认命令行:[filePath=classpath:data.csv,--spring.cloud.task.closecontext_enable=false,--spring.cloud.task.executionid=13]
2018-03-22 10:10:51.497 INFO 10431---[main]o.s.b.c.l.support.SimpleJobLauncher:Job:[FlowJob:[name=intakeJob]]使用以下参数启动:〔{filePath=classpath:data.csv,-spring.cloud.task.executionid=13,-springe.cloud.ttask.closecontext_enable=false,run.id=1}〕
这很好,参数被传递给批处理作业。现在,当我尝试用不同的参数运行同一个任务时:
task launch fileInjectTask --arguments "filePath=/home/hmcmanus/spring-cloud-dataflow-samples/batch/file-ingest/src/main/resources/data.csv --spring.cloud.task.closecontext_enable=false"
我在日志中看到了以下内容:
2018-03-22 10:12:18.249 信息 10554 --- [ main] o.s.b.a.b.JobLauncherCommandLineRunner : 运行默认命令行: [filePath=/home/hmcmanus/spring-cloud-dataflow-samples/batch/file-ingest/src/main/resources/data.csv, --spring.cloud.task.closecontext_enable=false, --spring.cloud.task.executionid=14]
2018-03-22 10:12:18.322 INFO 10554-[main]o . s . b . c . l . support . simplejoblauncher:Job:[flow Job:[name = ingestJob]]用以下参数启动:[{filePath=classpath:data.csv,-spring . cloud . task . execution id = 13,run.id=1,-spring . cloud . task . close context _ enable = false }]
正如您在第二个示例中看到的,任务的参数是正确的,但是批处理作业的参数是任务执行的旧参数。
这里有我遗漏的东西吗?为什么Spring批处理作业不获取新任务执行的参数?
更新
为了排除数据库中的差异以及为使其运行而需要进行的任何修改,我还验证了数据流服务器和任务的嵌入式H2数据库具有相同的功能。
我在那个例子中遇到了同样的情况。到目前为止,我已经意识到正在使用任务的第一个执行ID作为参数来执行作业,在您的例子中是task.executionid=13。此值不会在作业执行过程中更改。根据春云任务参考:
Spring Boot 提供了在 über-jar 中轻松执行批处理作业的工具。Spring Boot 对此功能的支持允许开发人员在该执行中执行多个批处理作业。Spring Cloud Task 提供了将作业的执行(作业执行)与任务的执行相关联的能力,以便可以追溯到另一个。
此功能是通过使用TaskBatchExecutionListener来实现的。默认情况下,此侦听器在配置了Spring Batch作业(通过在上下文中定义作业类型的bean)和类路径中可用的spring-cloud d-task-batjar的任何上下文中自动配置。侦听器将被注入到所有作业中。
https://docs.spring.io/spring-cloud-task/current-SNAPSHOT/reference/htmlsingle/#batch-association
然而,在这个例子中,需求被包含在内。
我想从另一个作业中获取参数,就像我们从另一个作业中复制工件一样。 考虑2个詹金斯作业A和B。拉链制品。 我的要求:我希望作业B将所有参数传递给作业A中的构建#30。(我使用复制工件插件从作业A的#30复制.zip)如何从不同的jenkins作业获取参数?
问题内容: 我是cron工作的新手,不确定是否会奏效。 为了安全起见,我考虑过制作一个一页脚本,该脚本查找某些GET值(用户名,密码和安全代码),以确保只有计算机和知道这3种信息的人才能运行该命令。 我制作了脚本,并且可以在浏览器中运行该脚本,但是可以使用GET值运行cron作业吗? 一个例子就是我跑步 这可能吗? 问题答案: 仅当通过Web服务器调用脚本时,&关联数组才被初始化。通过命令行调用时
问题内容: 我今天将詹金斯从1.618升级到2.3。这包括安装它推荐的一堆插件(大多数是管道插件及其依赖性)。 自升级以来,每当某项工作开始另一项工作时,我都会收到一个新错误(或至少是新的不良行为)。除非子作业已定义了这些键,否则将忽略作为“预定义参数”传递给子项的任何值。 让我说明一下:假设我有一份工作。 发布会通过“触发其他项目参数构建”生成后行动。在该“构建后操作”的定义中,已定义了“预定义
我得和Spring批处理问题。都与通过命令行传入的JobParameters有关。 第一期: 为了从JobParameters获取路径,我使用BeforeStep注释加载JobParameters并将它们复制到局部变量上。不幸的是,这不起作用。变量将为并且执行失败,因为文件无法打开。 如何访问读取器中的作业参数?我想将文件路径作为命令行参数传入,然后读取这个文件。
问题内容: TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数。我想知道的是,是否可以将它们传递给 上游 。 用例: 我们有三份工作;,和。它们通常仅需要一个阶段就可以单独运行,但是在越来越频繁的情况下,我们希望能够将所有三个阶段背靠背运行。 第一个和第二个依赖于您可以提前定义的参数,但是第三个和第二个依赖于从第二个作业生成的参数(该文件名的结构在job_two运行之前是未
问题内容: 我正在使用具有集成交付管道功能(https://jenkins.io/solutions/pipeline/)的Jenkins v2.1 来编排两个现有构建(构建和部署)。 在我的参数化构建中,我有3个用户参数设置,也需要在管道中选择该参数。 管道脚本如下: 除以外,此方法均正常运行。当我构建管道时,会引发以下错误: 如何解决此类型转换错误?甚至更好的是,有没有一种麻烦的方式可以将所有
我们正在实施Spring批量作业, 我们需要将作业参数从Client/MASTER传递给SLAVE。CLIENT/MASTER是我们的作业和分区代码所在的位置。我们使用传递JOB参数的J Unit调用JOB。 SLAVE是定义所有步骤及其实现(读取器Writer和处理器)的地方。 我们能够以独立的方式实现这一点,但不能与客户一起实现 我们正在使用Weblogic和Spring集成以及JMS来实现同
我想在dev/prod环境中更改Spark作业的类型安全配置。在我看来,实现这一点的最简单方法是将传递给作业。那么Typesafe配置库将为我完成这项工作。 将选项添加到spark-submit命令时,不会发生任何情况。 我收到。