Spring Boot 4 Microservices & REST APIs · Урок

Типобезопасная конфигурация с @ConfigurationProperties

Связывайте свойства с типизированными классами конфигурации

Урок 3 из 413 шагов

«Типобезопасная конфигурация с @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: 3

Injecting 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 prefix to a class or record
  • Register via @ConfigurationPropertiesScan or @EnableConfigurationProperties
  • Records enable immutable constructor binding
  • Nested types, lists, and maps bind naturally
  • @Validated makes 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 — локальная установка не требуется.

Все уроки этого курса

  1. application.properties и YAML
  2. Профили окружений
  3. Типобезопасная конфигурация с @ConfigurationProperties
  4. Внешняя конфигурация и её переопределение
← Назад к Spring Boot 4 Microservices & REST APIs