Я пытаюсь реализовать DeployerPartitonHandler
для создания модулей для каждого раздела, используя KubernetesTaskLauncher
в проекте весенней облачной задачи, который выполняет пакетное задание как задачу в SCDF, работающем в среде Kubernetes.
Пакетное задание сначала создает no разделов на основе критериев и выполняет шаги раздела для чтения данных из таблицы и записи в файл.
Чтобы реализовать DeployerPartitonHandler
с конфигурацией задания XML, я добавил класс конфигурации задания, в котором есть определение компонента для обработчика раздела, и DeployerStepExecutionHandler
и добавил необходимые изменения в XML задания для отображения
DeployerPartitonHandler
шагать вместо базы TaskExecutorPartitionHandler
.
Но при выполнении задания в качестве Задачи с этими изменениями я получаю
Исключение нулевого указателя для ссылки TaskExecution в классе DeployerPartitonHandler.
Ошибка ниже,
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]
Ниже приведен код DeployerPartitonHandler в строке № 289 и ошибка его выброса, поскольку объект 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;
}
}