Spring / Spring Boot 4 Basics Interview Questions
What is Spring Boot's externalized configuration with @Value and @ConfigurationProperties?
Spring Boot 4 provides two ways to inject configuration values into beans: @Value for simple individual values and @ConfigurationProperties for structured, type-safe groups of related properties.
# application.yml: app: payment: gateway-url: https://payment.example.com/api timeout-seconds: 30 retry-attempts: 3 supported-currencies: [USD, EUR, GBP, JPY] api: rate-limit: 1000 // Method 1: @Value for simple individual values @Service public class RateLimiter { @Value("${api.rate-limit}") private int rateLimit; @Value("${api.rate-limit:500}") // default value if not configured private int rateLimitWithDefault; @Value("${MISSING_PROP:#{null}}") // null default private String optionalProp; @Value("${spring.application.name}") private String appName; } // Method 2: @ConfigurationProperties for grouped values (recommended) @ConfigurationProperties(prefix = "app.payment") @Validated public record PaymentProperties( @NotBlank URL gatewayUrl, @Positive int timeoutSeconds, @Min(1) @Max(10) int retryAttempts, @NotEmpty List<String> supportedCurrencies ) {} // Register and inject: @EnableConfigurationProperties(PaymentProperties.class) @SpringBootApplication public class App { ... } @Service @RequiredArgsConstructor public class PaymentService { private final PaymentProperties config; // type-safe injection public void processPayment(String currency) { if (!config.supportedCurrencies().contains(currency)) { throw new UnsupportedCurrencyException(currency); } } }
More Related questions...