Spring Cloud Data Flow: невозможно передать список, разделенный запятыми, для аннотации задания

Я использую Spring Cloud Data Flow Java Task DSL для запуска Spring Cloud Flow Tasks в Kubernetes.

Все работает как положено и pod успешно запускается; однако, когда я пытаюсь запустить модуль, передавая аннотации задания, разделенные запятыми, в качестве входных параметров, как показано ниже (значение1, значение2), запуск модуля завершается неудачно:

      Map<String, String> taskLaunchProperties = new DeploymentPropertiesBuilder()                         
   .put("deployer.mytask.kubernetes.jobAnnotations", "myAnnotation:value1,value2").build();

Попытка запустить задачу с указанными выше параметрами приводит к следующему исключению:

Исключение HTTP при попытке запуска задачи. Основная причина: [{"logref":"IllegalArgumentException","message":"Неверное значение аннотации: value2","links":[]}]

Однако тот же код отлично работает, если я передаю только одно значение аннотации (т.е. значение1):

      Map<String, String> taskLaunchProperties = new DeploymentPropertiesBuilder()
    .put("deployer.mytask.kubernetes.jobAnnotations", "myAnnotation:value1").build();

При дальнейшем копании я обнаружил, что основной причиной проблемы является класс PropertyParseUtils , используемый Spring Cloud Data Flow для анализа входных свойств:

      public static Map<String, String> getStringPairsToMap(String stringPairs) {
        Map<String, String> mapValue = new HashMap<>();

        if (StringUtils.hasText(stringPairs)) {
            String[] pairs = stringPairs.split(",");
            for (String pair : pairs) {
                String[] splitString = pair.split(":", 2);
                Assert.isTrue(splitString.length == 2, String.format("Invalid annotation value: %s", pair));//This is the line that prevents me from passing a comma seperated list of values for an annotaiton
                mapValue.put(splitString[0].trim(), splitString[1].trim());
            }
        }

        return mapValue;
    }

То, как был написан код в приведенном выше классе (см. Assert.isTrue оператор), он никогда не позволит передать список, разделенный запятыми, для данной аннотации.

Вопрос: Как мы можем передать список значений, разделенных запятыми, для аннотации при использовании Spring Cloud Data Flow?

0 ответов

Другие вопросы по тегам