Весенний ботинок. Преимущество использования аннотации @ConfigurationProperties - PullRequest
1 голос
/ 21 октября 2019

Не могли бы вы объяснить мне, как использовать аннотацию @ConfigurationProperties?

Мне нужны параметры моего кода.

Сначала с аннотацией @ConfigurationProperties:

@Service
@ConfigurationProperties(prefix="myApp")
public class myService() {
  private int myProperty;
  public vois setMyProperty(int myProperty) {
    this.myProperty = myProperty;
  }
  // And this I can use myProperty which was injected from application.properties (myApp.myProperty = 10)
}

Второй без аннотации @ConfigurationProperties.

Выглядит это так:

@Service
public class myService() {
    private final Environment environment;
    public myService(Environment environment) {
        this.environment = environment;
    }
  // And this I can use myProperty which was injected from application.properties (myApp.myProperty = 10)
  environment.getProperty("myApp.myProperty")
}

С одним свойством количество кода выглядит одинаково, но если у меня около 10 свойств, первые вариантыбудет иметь больше шаблонного кода (определите 10 свойств и 10 установщиков для этих свойств).

Второй вариант будет иметь один впрыск среды и без добавления дополнительного кода.

Ответы [ 3 ]

2 голосов
/ 21 октября 2019

@ConfigurationProperties используется, когда вы хотите отобразить набор свойств из файла свойств со свойствами класса. Использование @ConfigurationProperties сделает ваш код более читабельным, категоризованным / модульным и более чистым. Как?

  1. У вас есть свойства приложения, сопоставленные с бобом POJO и обеспечивающие возможность повторного использования.

  2. Вы используете боб с абстракцией (свойства вводятся автоматически).

Теперь, если вы используете bean-компонент Environment, вам всегда нужно будет вызвать getProperty, а затем указать строковое имя свойства, так что множество шаблоновкод. Кроме того, если вам нужно провести рефакторинг какого-либо свойства и переименовать его, вы должны сделать это во всех местах, где оно используется.

Следовательно, я рекомендую, когда вам нужно сгруппировать свойства и повторно использовать в нескольких местах. для @ConfigurationProperties. Если вам нужно использовать свойство или два и только в одном месте в приложении, можно использовать Среду.

0 голосов
/ 21 октября 2019

При использовании ConfigurationProperties вам не нужно запоминать имя свойства, чтобы получить его. Весна заботится о картировании. Например:

app.properties.username-max-length в свойствах

будет сопоставлен с

String usernameMaxLength в POJO

Вам просто нужно получить поле usernameMaxLengthимя право, один раз.

Использование ConfigurationProperties облегчает тестирование вашего кода. Вы можете иметь несколько файлов свойств для различных тестовых сценариев и использовать их в своих тестах с помощью TestPropertySource("path").

Теперь, если шаблон getters / setters беспокоит вас. Вы всегда можете использовать Ломбок @Getter / @Setter. Это всего лишь предложение и зависит от выбора человека.

Кроме того, начиная с Spring Boot 2.2.0 , ваши @ConfigurationProperties классы могут быть неизменными

@ConfigurationProperties(prefix = "app.properties")
public class AppProperties {

    private final Integer usernameMaxLength;

    @ConstructorBinding
    public AppProperties(Integer usernameMaxLength) {

        this.usernameMaxLength = usernameMaxLength;
    }

    // Getters
}
0 голосов
/ 21 октября 2019

@ ConfigurationProperties - аннотация для внешней конфигурации. Чтобы добавить значение свойства из файла свойств в класс, мы можем добавить @ ConfigurationProperties на уровне класса

...