我正在尝试在春季云任务项目中使用DeployerPartitonHandler
为每个分区创建KubernetesTaskLauncher
,以在Kubernetes环境中运行的SCDF中将批处理作业作为任务执行。
批处理作业首先根据条件创建任何分区,然后执行分区步骤以从表中读取数据并写入文件。
要使用XML Job配置实现DeployerPartitonHandler
,我添加了具有针对分区处理程序和DeployerStepExecutionHandler
的bean定义的Job配置类,并添加了要映射的Job XML所需的更改
DeployerPartitonHandler
而不是基础TaskExecutorPartitionHandler
步进。
但是当通过这些更改将任务作为任务执行时,我得到了
DeployerPartitonHandler类中TaskExecution参考的空指针异常。
出现错误,
java.lang.NullPointerException: null
at org.springframework.cloud.task.batch.partition.DeployerPartitionHandler.launchWorker(DeployerPartitionHandler.java:289) ~[spring-cloud-task-batch-2.1.0.M2.jar:2.1.0.M2]
at org.springframework.cloud.task.batch.partition.DeployerPartitionHandler.launchWorkers(DeployerPartitionHandler.java:265) ~[spring-cloud-task-batch-2.1.0.M2.jar:2.1.0.M2]
下面是第289行的DeployerPartitonHandler的代码及其抛出错误,因为TaskExecution对象为Null。
arguments.add(formatArgument(SPRING_CLOUD_TASK_NAME, String.format("%s_%s_%s",taskExecution.getTaskName(),
注意:在下面提到的beforeTask方法(在DeployerPartitonHandler类中定义)中,TaskExecution参考值设置正确,但是当调用在第289行时,此时TaskExecution为Null。
@BeforeTask
public void beforeTask(TaskExecution taskExecution) {
this.taskExecution = taskExecution;
if(this.commandLineArgsProvider == null) {
SimpleCommandLineArgsProvider provider = new
SimpleCommandLineArgsProvider(taskExecution);
this.commandLineArgsProvider = provider;
}
}