Spring Cloud Task参数不会传播到Spring Batch作业参数

时间:2018-03-21 23:42:53

标签: java spring-boot spring-batch spring-cloud-dataflow spring-cloud-task

我正在从普通弹簧批量迁移到弹簧云任务,并通过弹簧云数据流执行弹簧批量。我在我的工作和我为文件injest部署的示例作业中遇到了以下问题:

https://docs.spring.io/spring-cloud-dataflow-samples/docs/current/reference/htmlsingle/#_batch_file_ingest

我正在使用带有postgres后端的spring-cloud-dataflow-server-local-1.4.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] osbabJobLauncherCommandLineRunner:运行默认命令行:[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] osbclsupport.SimpleJobLauncher:Job:[FlowJob:[name = ingestJob]]使用以下参数启动:[{filePath = classpath:data .csv,-spring.cloud.task.executionid = 13,-spring.cloud.task.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 INFO 10554 --- [main] osbabJobLauncherCommandLineRunner:运行默认命令行:[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] osbclsupport.SimpleJobLauncher:Job:[FlowJob:[name = ingestJob]]使用以下参数启动:[{filePath = classpath:data .csv,-spring.cloud.task.executionid = 13,run.id = 1,-spring.cloud.task.closecontext_enable = false}]

正如您可以看到第二个示例,任务的参数很好,但批处理作业的参数是任务执行的旧参数。

这里有什么我想念的吗?为什么spring批处理作业不能获取新任务执行的参数?

更新

为了排除数据库的差异以及我需要进行的任何修改以使其运行,我还验证了与数据流服务器和任务的嵌入式H2数据库相同的功能。

1 个答案:

答案 0 :(得分:0)

我遇到了与该例子相同的情况。到目前为止,我已经意识到正在使用任务的第一个执行ID作为参数执行作业,在您的情况下task.executionid = 13。在作业执行中不会更改此值。 根据Spring Cloud Task Reference:

  

Spring Boot提供了轻松执行批处理作业的工具   在一个超级罐子里面。 Spring Boot支持此功能   供开发人员在该执行中执行多个批处理作业。   Spring Cloud Task提供了关联执行的能力   作业(作业执行)与任务的执行,以便一个人可以   追溯到另一​​个。

     

此功能通过使用   TaskBatchExecutionListener。默认情况下,此侦听器为auto   在配置了Spring Batch Job的任何上下文中配置   (通过在上下文中定义Job类型的bean)和   类路径中提供了spring-cloud-task-batch jar。该   听众将被注入所有工作。

https://docs.spring.io/spring-cloud-task/current-SNAPSHOT/reference/htmlsingle/#batch-association

然而,在该示例中,要求如所述。