junior
Как использовать @Value и @PropertySource?
@Value – аннотация для внедрения значений из внешних источников (файлы свойств, переменные окружения, SpEL-выражения) в поля или параметры бинов. @PropertySource – указывает файл свойств для загрузки.
Пример
@Configuration
@PropertySource("classpath:application.properties")
@PropertySource("classpath:db.properties")
public class AppConfig { }
Основные способы использования @Value
Пример
@Component
public class AppSettings {
@Value("${app.name}")
private String appName; // из properties
@Value("${app.description:Default}")
private String description; // со значением по умолчанию
@Value("${server.port}")
private int serverPort; // автоматическое преобразование типов
@Value("${JAVA_HOME}")
private String javaHome; // переменная окружения
@Value("#{T(java.lang.Math).random()}")
private double randomValue; // SpEL-выражение
@Value("${app.servers}")
private List<String> servers; // список (app.servers=a,b,c)
}
Лучшая практика – @ConfigurationProperties (Spring Boot)
Для группы связанных свойств лучше использовать @ConfigurationProperties:
Пример
@Configuration
@ConfigurationProperties(prefix = "db")
public class DatabaseProperties {
private String url;
private int poolSize;
// геттеры и сеттеры обязательны
}
На собеседовании: интервьюер хочет услышать про значения по умолчанию, SpEL и
@ConfigurationPropertiesкак альтернативу@Value. Частая ошибка – использовать@Valueв статических полях (не работает) или забыть значение по умолчанию (приложение не запустится, если свойство не найдено).