Задача 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
файл.