Сообщения

Показаны сообщения с ярлыком "Spring Boot конфигурация"

Spring Boot: автоконфигурация Spring WebFlux

Изображение
Spring Boot обеспечивает автоматическую настройку Spring WebFlux, которая хорошо работает с большинством приложений. Автоконфигурация добавляет следующие функции поверх стандартных настроек Spring: Настройка кодеков для экземпляров HttpMessageReader и HttpMessageWriter. Поддержка обслуживания статических ресурсов, включая поддержку WebJars. Если вы хотите сохранить функции Spring Boot WebFlux и добавить дополнительную конфигурацию WebFlux, вы можете добавить свой собственный класс @Configuration типа WebFluxConfigurer, но без @EnableWebFlux. Если вы хотите получить полный контроль над Spring WebFlux, вы можете добавить свою собственную @Configuration с аннотацией @EnableWebFlux. Читайте также: Spring Boot: веб-приложения с Spring WebFlux Framework Разработка вашего первого Spring Boot приложения Spring Boot стартеры

Spring Boot: конфигурация, добавление активных профилей

Изображение
Свойство spring.profiles.active следует тем же правилам упорядочения, что и другие свойства: побеждает самый высокий PropertySource. Это означает, что вы можете указать активные профили в application.properties, а затем заменить их с помощью переключателя командной строки. Иногда полезно иметь специфичные для профиля свойства, которые добавляют к активным профилям, а не заменяют их. Свойство spring.profiles.include можно использовать для безусловного добавления активных профилей. Точка входа SpringApplication также имеет Java API для настройки дополнительных профилей (то есть поверх тех, которые активируются свойством spring.profiles.active). Метод setAdditionalProfiles() в SpringApplication. Например, когда приложение со следующими свойствами запускается с помощью переключателя --spring.profiles.active=prod, профили proddb и prodmq также активируются: --- my.property: fromyamlfile --- spring.profiles: prod spring.profiles.include: - proddb - prodmq Помните, что свойство s...

Spring Boot: конфигурация, профили

Изображение
Профили Spring предоставляют способ разделения частей конфигурации вашего приложения и делают его доступным только в определенных средах. Любой @Component, @Configuration или @ConfigurationProperties можно пометить @Profile, чтобы ограничить время его загрузки, как показано в следующем примере: @Configuration(proxyBeanMethods = false) @Profile("production") public class ProductionConfiguration { // ... } Если bean'ы @ConfigurationProperties регистрируются через @EnableConfigurationProperties вместо автоматического сканирования, необходимо указать аннотацию @Profile в классе @Configuration, который имеет аннотацию @EnableConfigurationProperties. В случае сканирования @ConfigurationProperties @Profile может быть указан в самом классе @ConfigurationProperties. Вы можете использовать свойство Environment spring.profiles.active, чтобы указать, какие профили активны. Вы можете указать свойство любым из способов. Например, вы можете включить его в ваш application.p...

Spring Boot: конфигурация, @ConfigurationProperties против @Value

Изображение
Аннотация @Value - это базовая функция контейнера, которая не предоставляет те же функции, что и свойства безопасной конфигурации. В следующей таблице приведены функции, которые поддерживаются @ConfigurationProperties и @Value: Функционал @ConfigurationProperties @Value Смягченная привязка Есть Нет Поддержка метаданных Есть Нет Оценка SpEL Нет Есть Если вы определяете набор ключей конфигурации для своих собственных компонентов, рекомендуется сгруппировать их в POJO с пометкой @ConfigurationProperties. Вы также должны знать, что, поскольку @Value не поддерживает смягченное связывание, это не очень хороший вариант, если вам нужно предоставить значение с помощью переменных среды. Наконец, хотя вы можете написать выражение SpEL в @Value, такие выражения не обрабатываются из файлов свойств приложения. Читайте также: Spring Boot: конфигурация, проверка @ConfigurationProperties Spring Boot: использование типов аннотированных @ConfigurationProperties Spring Boot:...

Spring Boot: конфигурация, проверка @ConfigurationProperties

Изображение
Spring Boot пытается проверять классы @ConfigurationProperties всякий раз, когда они аннотируются аннотацией Spring @Validated. Вы можете использовать аннотации ограничений JSR-303 javax.validation непосредственно в своем классе конфигурации. Для этого убедитесь, что совместимая реализация JSR-303 находится в вашем пути к классам, а затем добавьте аннотации ограничений к вашим полям, как показано в следующем примере: @ConfigurationProperties(prefix="acme") @Validated public class AcmeProperties { @NotNull private InetAddress remoteAddress; // ... getters и setters } Вы также можете запустить проверку, добавив аннотацию к методу @Bean, который создает свойства конфигурации с помощью @Validated. Чтобы гарантировать, что проверка всегда запускается для вложенных свойств, даже если свойства не найдены, соответствующее поле должно быть аннотировано @Valid. Следующий пример основан на предыдущем примере AcmeProperties: @ConfigurationProperties(prefix=...

Spring Boot: конфигурация, конвертация свойств

Изображение
Spring Boot пытается привести свойства внешнего приложения к нужному типу, когда он связывается с bean-компонентами @ConfigurationProperties. Если вам нужно преобразование пользовательских типов, вы можете предоставить bean-компонент ConversionService (с bean-компонентом с именем ConversionService) или редакторы пользовательских свойств (с помощью bean-компонента CustomEditorConfigurer) или пользовательские преобразователи (с определениями bean, аннотированными как @ConfigurationPropertiesBinding). Поскольку этот bean-компонент запрашивается очень рано в течение жизненного цикла приложения, обязательно ограничьте зависимости, которые использует ваш ConversionService. Как правило, любая требуемая зависимость не может быть полностью инициализирована во время создания. Возможно, вы захотите переименовать свой пользовательский ConversionService, если он не требуется для принудительного использования ключей конфигурации и полагаться только на пользовательские преобразователи, имеющие квали...

Spring Boot: конфигурация, слияние сложных типов свойств

Изображение
Когда списки настроены более чем в одном месте, переопределение работает путем замены всего списка. Например, предположим, что объект MyPojo с атрибутами name и description по умолчанию равен null. В следующем примере представлен список объектов MyPojo из AcmeProperties: @ConfigurationProperties("acme") public class AcmeProperties { private final List list = new ArrayList (); public List getList() { return this.list; } } Рассмотрим следующую конфигурацию: acme: list: - name: my name description: my description --- spring: profiles: dev acme: list: - name: my another name Если профиль dev не активен, AcmeProperties.list содержит одну запись MyPojo, как определено ранее. Если профиль dev включен, однако, список все еще содержит только одну запись (с name = my another name и description = null). Эта конфигурация не добавляет второй экземпляр MyPojo в список и не объединяет элементы. Когда список указан в нескольких про...

Spring Boot: смягченная привязка

Изображение
Spring Boot использует некоторые смягченные правила для привязки свойств Environment к bean-компонентам @ConfigurationProperties, поэтому нет необходимости в точном соответствии между именем свойства Environment и именем свойства bean-компонента. К распространенным примерам, в которых это полезно, относятся свойства среды, разделенные дефисом (например, привязка context-path к contextPath), и свойства среды с большой буквы (например, привязка PORT к port). В качестве примера рассмотрим следующий класс @ConfigurationProperties: @ConfigurationProperties(prefix="acme.my-project.person") public class OwnerProperties { private String firstName; public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } } С помощью предыдущего кода можно использовать следующие имена свойств: Смягченная привязка Свойство Описание acme.my-project.person.first-name Вариант ...

Spring Boot: сторонняя конфигурация

Изображение
Помимо использования @ConfigurationProperties для аннотирования класса, вы также можете использовать его в открытых методах @Bean. Это может быть особенно полезно, когда вы хотите связать свойства со сторонними компонентами, которые находятся вне вашего контроля. Чтобы настроить bean-компонент из свойств Environment, добавьте @ConfigurationProperties к его регистрации bean-компонента, как показано в следующем примере: @ConfigurationProperties(prefix = "another") @Bean public AnotherComponent anotherComponent() { ... } Любое свойство JavaBean, определенное с другим префиксом, отображается на этот bean-компонент AnotherComponent аналогично примеру AcmeProperties . Читайте также: Spring Boot: проверка типов свойств конфигурации, связывание свойств JavaBean Spring Boot: проверка типов свойств конфигурации, привязка конструктора Spring Boot: включение типов аннотированных @ConfigurationProperties Spring Boot: использование типов аннотированных @ConfigurationProp...

Spring Boot: использование типов аннотированных @ConfigurationProperties

Изображение
Этот стиль конфигурации особенно хорошо работает с внешней конфигурацией YAML SpringApplication, как показано в следующем примере: # application.yml acme: remote-address: 192.168.1.1 security: username: admin roles: - USER - ADMIN # additional configuration as required Для работы с bean-компонентами @ConfigurationProperties вы можете внедрить их так же, как и любой другой bean-компонент, как показано в следующем примере: @Service public class MyService { private final AcmeProperties properties; @Autowired public MyService(AcmeProperties properties) { this.properties = properties; } //... @PostConstruct public void openConnection() { Server server = new Server(this.properties.getRemoteAddress()); // ... } } Использование @ConfigurationProperties также позволяет создавать файлы метаданных, которые могут использоваться в средах разработки для автоматического заполнения ...

Spring Boot: включение типов аннотированных @ConfigurationProperties

Изображение
Spring Boot предоставляет инфраструктуру для связывания типов @ConfigurationProperties и регистрации их в виде bean-компонентов. Вы можете включить свойства конфигурации на индивидуальной основе или включить сканирование свойств конфигурации, которое работает аналогично сканированию компонентов. Иногда классы, помеченные @ConfigurationProperties, могут не подходить для сканирования, например, если вы разрабатываете собственную автоконфигурацию или хотите включить их условно. В этих случаях укажите список типов для обработки с помощью аннотации @EnableConfigurationProperties. Это можно сделать для любого класса @Configuration, как показано в следующем примере: @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(AcmeProperties.class) public class MyConfiguration { } Чтобы использовать сканирование свойств конфигурации, добавьте аннотацию @ConfigurationPropertiesScan в свое приложение. Как правило, она добавляется в основной класс приложения, аннотированный @Sp...

Spring Boot: проверка типов свойств конфигурации, привязка конструктора

Изображение
Пример из предыдущего поста может быть переписан неизменным образом, как показано в следующем примере: package com.example; import java.net.InetAddress; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; import org.springframework.boot.context.properties.DefaultValue; @ConstructorBinding @ConfigurationProperties("acme") public class AcmeProperties { private final boolean enabled; private final InetAddress remoteAddress; private final Security security; public AcmeProperties(boolean enabled, InetAddress remoteAddress, Security security) { this.enabled = enabled; this.remoteAddress = remoteAddress; this.security = security; } public boolean isEnabled() { ... } public InetAddress getRemoteAddress() { ... } public Security getSecurity() { ... } public static class Security { priv...

Spring Boot: проверка типов свойств конфигурации, связывание свойств JavaBean

Изображение
Использование аннотации @Value("${property}") для добавления свойств конфигурации иногда может быть затруднительным, особенно если вы работаете с несколькими свойствами или ваши данные имеют иерархическую природу. Spring Boot предоставляет альтернативный метод работы со свойствами, который позволяет строго типизированным bean-компонентам управлять и проверять конфигурацию вашего приложения. Связывание свойств JavaBean Можно связать компонент, объявляющий стандартные свойства JavaBean, как показано в следующем примере: package com.example; import java.net.InetAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("acme") public class AcmeProperties { private boolean enabled; private InetAddress remoteAddress; private final Security security = new Security(); public boolean isEnabled() { ... } public ...

Spring Boot: конфигурация, недостатки YAML

Изображение
Файлы YAML не могут быть загружены с помощью аннотации @PropertySource. Таким образом, в случае, если вам нужно загрузить значения таким образом, вам нужно использовать файл свойств. Использование синтаксиса нескольких документов YAML в профильных файлах YAML может привести к неожиданному поведению. Например, рассмотрим следующую конфигурацию в файле: application-dev.yml server: port: 8000 --- spring: profiles: "!test" security: user: password: "secret" Если вы запускаете приложение с аргументом --spring.profiles.active=dev, вы можете ожидать, что security.user.password будет иметь значение "secret", но это не так. Вложенный документ будет отфильтрован, так как основной файл называется application-dev.yml. Он уже считается специфичным для профиля, а вложенные документы будут игнорироваться. Рекомендуется не смешивать файлы YAML для конкретного профиля и несколько документов YAML. Придерживайтесь только одного из них. Читайте та...

Spring Boot: конфигурация, многопрофильные документы YAML

Изображение
Вы можете указать несколько специфичных для профиля документов YAML в одном файле, используя ключ spring.profiles, чтобы указать, когда документ применяется, как показано в следующем примере: server: address: 192.168.1.100 --- spring: profiles: development server: address: 127.0.0.1 --- spring: profiles: production & eu-central server: address: 192.168.1.120 В предыдущем примере, если профиль development активен, свойство server.address имеет значение 127.0.0.1. Аналогичным образом, если активны production и eu-central профили, свойство server.address имеет значение 192.168.1.120. Если профили development, production и eu-central не включены, то значение свойства равно 192.168.1.100. Поэтому spring.profiles может содержать простое имя профиля (например, production) или выражение профиля. Выражение профиля позволяет выразить более сложную логику профиля, например, production & (eu-central | eu-west). Если ни один из них явно не активен при запуске ко...

Spring Boot: конфигурация, использование YAML вместо свойств

Изображение
Использование YAML вместо свойств YAML представляет собой расширенный набор JSON и, как таковой, является удобным форматом для указания данных иерархической конфигурации. Класс SpringApplication автоматически поддерживает YAML в качестве альтернативы свойствам, когда у вас есть библиотека SnakeYAML в вашем пути к классам (classpath). Если вы используете «Starters», SnakeYAML автоматически предоставляется spring-boot-starter. Загрузка YAML Spring Framework предоставляет два удобных класса, которые можно использовать для загрузки документов YAML. YamlPropertiesFactoryBean загружает YAML в качестве свойств, а YamlMapFactoryBean загружает YAML в качестве карты. Например, рассмотрим следующий документ YAML: environments: dev: url: https://dev.example.com name: Developer Setup prod: url: https://another.example.com name: My Cool App Предыдущий пример будет преобразован в следующие свойства: environments.dev.url=https://dev.example.com e...

Spring Boot: конфигурация, заполнители в свойствах, шифрование свойств

Изображение
Заполнители в свойствах Значения в application.properties фильтруются через существующую Environment при их использовании, поэтому вы можете ссылаться к ранее определенным значениям (например, из свойств системы). app.name=MyApp app.description=${app.name} is a Spring Boot application Вы также можете использовать эту технику для создания «коротких» вариантов существующих свойств Spring Boot. Шифрование свойств Spring Boot не предоставляет встроенной поддержки для шифрования значений свойств, однако он предоставляет точки подключения, необходимые для изменения значений, содержащихся в Spring Environment. Интерфейс EnvironmentPostProcessor позволяет вам манипулировать Environment до запуска приложения. Если вы ищете безопасный способ хранения учетных данных и паролей, проект Spring Cloud Vault предоставляет поддержку для хранения внешней конфигурации в HashiCorp Vault. Читайте также: Spring Boot: внешняя конфигурация Spring Boot: конфигурация, файлы свойств приложения Sp...

Spring Boot: конфигурация, свойства профиля

Изображение
В дополнение к файлам application.properties свойства профиля также могут быть определены с использованием следующего соглашения об именах: application-{profile}.properties. Environment имеет набор профилей по умолчанию (по умолчанию [default]), которые используются, если активные профили не установлены. Другими словами, если никакие профили явно не активированы, тогда загружаются свойства из application-default.properties. Специфичные для профиля свойства загружаются из тех же мест, что и стандартные application.properties, причем специфичные для профиля файлы всегда переопределяют неспецифические, независимо от того, находятся ли специфичные для профиля файлы внутри или вне упакованного jar-файла. Если указано несколько профилей, применяется стратегия последний побеждает. Например, профили, указанные в свойстве spring.profiles.active, добавляются после профилей, настроенных через SpringApplication API, и поэтому имеют приоритет. Если вы указали какие-либо файлы в spring.config.loc...

Spring Boot: конфигурация, файлы свойств приложения

Изображение
SpringApplication загружает свойства из файлов application.properties в следующих местах и ​​добавляет их в Spring Environment: Подкаталог /config текущего каталога Текущий каталог Пакет /config в пути к классам (classpath) Корень пути к классам (classpath root) Список упорядочен по приоритету (свойства, определенные в местоположениях выше в списке, переопределяют свойства, определенные в нижних местоположениях). Вы также можете использовать файлы YAML ('.yml') в качестве альтернативы '.properties'. Если вам не нравится application.properties в качестве имени файла конфигурации, вы можете переключиться на другое имя файла, указав свойство среды spring.config.name. Вы также можете сослаться на явное местоположение, используя свойство среды spring.config.location (которое представляет собой разделенный запятыми список расположений каталогов или путей к файлам). В следующем примере показано, как указать другое имя файла: $ java -jar myproject.jar --spring.conf...

Spring Boot: конфигурация, доступ к свойствам командной строки

Изображение
По умолчанию SpringApplication преобразует любые аргументы параметра командной строки (то есть аргументы, начинающиеся с -- , например --server.port=9000 ) в property (свойство) и добавляет их в Spring Environment. Как упоминалось в посте о внешней конфигурации , свойства командной строки всегда имеют приоритет над другими источниками свойств. Если вы не хотите, чтобы свойства командной строки добавлялись в Environment, вы можете отключить их, используя SpringApplication.setAddCommandLineProperties(false). Читайте также: Spring Boot: внешняя конфигурация Spring Boot: SpringApplication, доступ к аргументам приложения Spring Boot: использование ApplicationRunner или CommandLineRunner