Spring Условия загрузки для переменных

Итак, у меня есть файл application.yml для моего загрузочного приложения spring, например:

spring:
  url: localhost
email:
  from: [email protected]
app:
  uuid: 3848348j34jk2dne9

Я хочу связать эти свойства конфигурации с различными компонентами в моем приложении, например:

@Component
public class FooA {
    private final String url;

    public FooA(@Value("${spring.url}") String url) {
        this.url = url
    }
}

@Component
public class FooB {
    private final String from;

    public FooA(@Value("${email.from}") String from) {
        this.from = from
    }
}

@Component
public class FooC {
    private final String uuid;

    public FooA(@Value("${app.uuid}") String uuid) {
        this.uuid = uuid
    }
}

Вышеупомянутое работает в моем приложении. Но мой вопрос заключается в том, что это лучший способ загрузки spring. Единственная альтернатива этому, что я знаю, это использовать объект Properties, создав bean внутри класса конфигурации, загрузив свойства со всеми переменными конфигурации и запустив свойство bean в компоненты.

Какова наилучшая практика в этом случае?

Ответ 1

Как вы определили два основных варианта для ввода конфигурации, используйте либо @Value для отдельных свойств, либо @ConfigurationProperties в объекте конфигурации javabean.

Какой из них вы используете, предпочтение отдается. Лично я предпочитаю использовать объект конфигурации.

Использование @ConfigurationProperties позволяет использовать проверку JSR-303 bean.
Вы также можете написать свою собственную проверку в настройщике вашего javabean, если хотите.
Вы можете аннотировать конфигурацию beans из проектов без spring, что позволяет вам писать легко настраиваемые библиотеки, но не зависит от spring.
Вы можете генерировать метаданные IDE из объектов, которые могут сделать процесс разработки более плавным.

Ниже приведены некоторые рекомендации, рекомендуемые при использовании конфигурации spring.

  • Создайте отдельные объекты @ConfigurationProperties для логических компонентов вашего приложения. Постарайтесь сохранить модульность и избегать создания свалки для всей конфигурации приложений.

  • Не используйте то же свойство @Value в нескольких местах.
    Если одна и та же конфигурация необходима в нескольких местах в вашем приложении, вы должны перенести это значение в объект конфигурации.
    Использование одного и того же свойства в нескольких аннотациях @Value затрудняет рассуждение, а также может вызвать неожиданное поведение, если вы определяете значение по умолчанию посредством выражения "SpEL" в одном месте, а не в другом.

  • Не определяйте свои собственные свойства в пространстве имен spring.
    Например, ваше свойство spring.url не является одним из свойств, определенных в документации.
    Используя одно и то же пространство имен, вы рискуете использовать это имя для чего-то в будущих версиях spring -boot.