tgoop.com/BookJava/3834
Create:
Last Update:
Last Update:
🧠 Конфигурация Spring Boot 3 через record и @ConstructorBinding
Вместо традиционных @Data + пустого конструктора можно сразу использовать Java 17 record для настройки свойств:
📌 Почему это полезно?toString(), equals() и т.д.
💡 Как сделать:
1. Подключаем зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
Это нужно, чтобы IDE и Spring метаинфу подхватили.
2. Создаём
record с аннотацией:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
@ConstructorBinding
@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
String host,
int port,
String username,
String password
) {}
3. Регистрируем бин в Spring:
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MailProperties.class)
public class AppConfig { }
4. Конфигурируем в
application.yml (или .properties):
app:
mail:
host: smtp.example.com
port: 587
username: [email protected]
password: secret123
⚠️ Обратите внимание:
@ConstructorBinding Spring не сможет смотать значения в record’ы.@Validated и JSR-303 аннотации (@NotNull, @Min и т.д.).🧠 Что получилось?
record заменил класс с 4 полями, геттерами и конструктором.💡 Дополнительный лайфхак:
Если вам нужно разделить конфиги по окружениям (dev/prod), просто создайте два
record’а с разными префиксами или используйте @Profile. В Spring Boot 3 этот подход «из коробки» работает наилучшим образом.👉@BookJava
