Типобезопасная конфигурация с @ConfigurationProperties
Связывайте свойства с типизированными классами конфигурации
«Типобезопасная конфигурация с @ConfigurationProperties» — бесплатный урок Spring Boot 4 Microservices & REST APIs на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Spring Boot 4 Microservices & REST APIs, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Spring Boot 4 Microservices & REST APIs содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Beyond @Value
Scattering dozens of @Value annotations across a feature is brittle and hard to validate. @ConfigurationProperties binds a whole group of related keys to a single strongly typed object.
You get IDE auto-completion, type safety, validation, and a clear contract for what the feature reads.
Binding a Prefix to a Class
Declare a class with a prefix; Spring maps each key under that prefix to a matching field. Relaxed binding lets max-retries in YAML map to maxRetries in Java.
@ConfigurationProperties(prefix = "app.mail")
public class MailProperties {
private String host;
private int port;
private int maxRetries;
// getters and setters
}Registering the Properties Bean
A @ConfigurationProperties class must become a bean. The cleanest way is @EnableConfigurationProperties on a configuration class, or @ConfigurationPropertiesScan on the main app.
@SpringBootApplication
@ConfigurationPropertiesScan
public class Application { }
// or explicitly:
@Configuration
@EnableConfigurationProperties(MailProperties.class)
class MailConfig { }The Backing YAML
With the prefix app.mail, these YAML keys bind to the fields. Relaxed binding accepts kebab-case keys for camelCase fields.
app:
mail:
host: smtp.example.com
port: 587
max-retries: 3Injecting the Properties
Inject the typed object anywhere like any other bean. The feature code reads structured config instead of loose strings.
@Service
public class MailService {
private final MailProperties props;
public MailService(MailProperties props) {
this.props = props;
}
void send() {
connect(props.getHost(), props.getPort());
}
}Immutable Binding with Records
Spring Boot supports constructor binding, perfect for immutable config. A Java record works directly with @ConfigurationProperties, no setters needed.
@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
String host,
int port,
int maxRetries) {
}Default Values
With records you can give defaults in a compact constructor; with classic classes you initialize the field. Defaults apply when the key is absent from the Environment.
@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(String host, Integer port, Integer maxRetries) {
public MailProperties {
if (port == null) port = 587;
if (maxRetries == null) maxRetries = 3;
}
}Nested Objects
Configuration trees map to nested types. A field of a custom type binds keys one level deeper, keeping complex config organized.
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private final Security security = new Security();
public Security getSecurity() { return security; }
public static class Security {
private boolean enabled;
private String issuer;
// getters/setters
}
}Lists and Maps
Collection-typed fields bind to YAML sequences and maps automatically, which is far cleaner than parsing comma-separated strings by hand.
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private List<String> allowedOrigins;
private Map<String, Integer> rateLimits;
// getters/setters
}
// app.allowed-origins: [a, b]
// app.rate-limits: { read: 100, write: 20 }Validating Bound Values
Add @Validated to the properties class and JSR-380 constraints to fields. Spring validates at startup and fails fast if config is invalid, instead of erroring deep in production.
@Validated
@ConfigurationProperties(prefix = "app.mail")
public class MailProperties {
@NotBlank private String host;
@Min(1) @Max(65535) private int port;
// getters/setters
}Metadata and the Processor
Add spring-boot-configuration-processor as an annotation processor to generate metadata. Your IDE then offers auto-complete and docs for your custom keys in application.yml.
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>Quick Check
Test your understanding of relaxed binding.
Recap
@ConfigurationProperties gives type-safe, grouped configuration.
- Bind a
prefixto a class or record - Register via
@ConfigurationPropertiesScanor@EnableConfigurationProperties - Records enable immutable constructor binding
- Nested types, lists, and maps bind naturally
@Validatedmakes invalid config fail fast at startup
Изучай Java с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 24
- Уроки
- 93
Часто задаваемые вопросы
Урок «Типобезопасная конфигурация с @ConfigurationProperties» бесплатный?
Да — полный текст урока «Типобезопасная конфигурация с @ConfigurationProperties» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Spring Boot 4 Microservices & REST APIs, подпишись на CoddyKit PRO. Курс Spring Boot 4 Microservices & REST APIs содержит 4 уроков всего.
Чему я научусь в уроке «Типобезопасная конфигурация с @ConfigurationProperties»?
Связывайте свойства с типизированными классами конфигурации Ты практикуешь Spring Boot 4 Microservices & REST APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Spring Boot 4 Microservices & REST APIs?
Предыдущий опыт не требуется. Spring Boot 4 Microservices & REST APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Типобезопасная конфигурация с @ConfigurationProperties»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Spring Boot 4 Microservices & REST APIs?
Да. Каждый урок Spring Boot 4 Microservices & REST APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- application.properties и YAML
- Профили окружений
- Типобезопасная конфигурация с @ConfigurationProperties
- Внешняя конфигурация и её переопределение