Задача Spring Data Flow не отображает свойства Spring Boot

У меня есть приложение Spring Boot, которое я хочу развернуть на сервере Spring Cloud Dataflow. У меня возникла проблема со свойствами приложения. По какой-то причине вложенные свойства не представлены в пользовательском интерфейсе потока данных. Почему это происходит?

Я определил свои свойства в файле application.yml. Я объявил свои свойства в dataflow-configuration-metadata.properties. Я регистрирую свой jar-файл Spring Boot в SDF из источника maven, а затем добавляю его в задачу. Внутри задачи кнопка «Параметры» не отображает все мои свойства.

Мое приложение включает Spring Batch, Spring Web, Hibernate, JaxB, Mapstruct и Lombok.

1 ответ

Прежде всего, поскольку вы упоминаете, что используете Lombok, вы хотите убедиться, что ваши зависимости вpom.xmlнастроены правильно.

Согласно документации Spring (Метаданные конфигурации )

Если вы используете Lombok в своем проекте, вам необходимо убедиться, что его обработчик аннотаций запускается перед обработчиком конфигурации Spring-boot. Чтобы сделать это с помощью Maven, вы можете перечислить обработчики аннотаций в правильном порядке, используя атрибут annotationProcessors подключаемого модуля компилятора Maven. Если вы не используете этот атрибут, а процессоры аннотаций подбираются зависимостями, доступными в пути к классам, убедитесь, что зависимость lombok определена до зависимости Spring-boot-configuration-processor.

Исходя из этого, если вы используетеmaven-compiler-plugin, вы должны объявить обработчики аннотаций в следующем порядке:

      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${compiler-plugin.version}</version>
    <configuration>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.mapstruct-processor.version}</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${org.projectlombok.lombok.version}</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-mapstruct-binding</artifactId>
                <version>${org.projectlombok.ombok-mapstruct-binding.version}</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

Переходя к свойствам, предположим, чтоapplication.ymlвыглядит так:

      my-app:
  name: AppName
  config:
    port: 8080

Тогда класс свойства конфигурации должен быть:

      @Data
@Configuration
@ConfigurationProperties(prefix = "my-app")
public class AppProperties {

    /**
     * Name
     */
    private String name;

    private final Config config = new Config();

    @Data
    public static class Config {

        /**
         * Port
         */
        private int port;
    }
}

Чтобы пользовательский интерфейс Dataflow правильно представлял свойства,META-INF/dataflow-configuration-metadata.propertiesбыло бы:

      configuration-properties.classes=com.example.app.AppProperties,\
com.example.app.AppProperties$Config

Важно: обратите внимание, как мы объявили внутренний класс в.propertiesфайл.

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