Получение исключения нулевого указателя для ссылки TaskExecution в классе DeployerPartitonHandler - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь реализовать 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;

        }
    }
...