Challenge - 5 Problems
Spring Boot Config Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate2:00remaining
What is the output when binding properties with @ConfigurationProperties?
Given the following Spring Boot configuration class and application.properties, what will be the value of
AppConfig.java:
application.properties:
appConfig.getTimeout() after the application starts?AppConfig.java:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private int timeout;
public int getTimeout() { return timeout; }
public void setTimeout(int timeout) { this.timeout = timeout; }
}application.properties:
app.timeout=5000
Spring Boot
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "app") public class AppConfig { private int timeout; public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } }
Attempts:
2 left
💡 Hint
Check how the prefix in @ConfigurationProperties matches the property keys.
✗ Incorrect
The property 'app.timeout=5000' matches the prefix 'app' and binds to the 'timeout' field. Spring Boot automatically converts the string '5000' to int and sets it.
📝 Syntax
intermediate2:00remaining
Which option correctly defines a nested property class for @ConfigurationProperties?
You want to bind nested properties under prefix 'server' like
server.address.host=localhost and server.address.port=8080. Which of the following nested class definitions inside a @ConfigurationProperties class is syntactically correct?Spring Boot
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "server") public class ServerConfig { private Address address = new Address(); public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public static class Address { private String host; private int port; // getters and setters } }
Attempts:
2 left
💡 Hint
Remember that nested classes for binding need proper getters and setters.
✗ Incorrect
Option A correctly defines a public static nested class with private fields and public getters and setters, which is required for Spring Boot to bind nested properties.
🔧 Debug
advanced2:00remaining
Why does this @ConfigurationProperties class fail to bind properties?
Consider this class:
Given
@Component
@ConfigurationProperties(prefix = "mail")
public class MailConfig {
private String host;
private int port;
}Given
mail.host=smtp.example.com and mail.port=25 in application.properties, why are the properties not bound?Spring Boot
@Component @ConfigurationProperties(prefix = "mail") public class MailConfig { private String host; private int port; }
Attempts:
2 left
💡 Hint
Check how Spring Boot binds properties to fields.
✗ Incorrect
Spring Boot requires either getters/setters for private fields, public fields, or annotations like @ConstructorBinding. Private fields without getters/setters are ignored by default.
🧠 Conceptual
advanced2:00remaining
What is the effect of using @ConstructorBinding with @ConfigurationProperties?
When you annotate a class with @ConfigurationProperties and @ConstructorBinding, what changes in how Spring Boot binds properties?
Attempts:
2 left
💡 Hint
Think about immutable configuration classes.
✗ Incorrect
@ConstructorBinding tells Spring Boot to bind properties by calling the constructor with matching parameters, enabling immutable configuration classes without setters.
❓ state_output
expert2:00remaining
What is the value of 'enabled' after binding with relaxed binding rules?
Given this configuration class:
And this property in application.properties:
What will be the value of
@Component
@ConfigurationProperties(prefix = "feature")
public class FeatureConfig {
private boolean enabled;
public boolean isEnabled() { return enabled; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
}And this property in application.properties:
feature.ENABLED=true
What will be the value of
featureConfig.isEnabled() after startup?Spring Boot
@Component @ConfigurationProperties(prefix = "feature") public class FeatureConfig { private boolean enabled; public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } }
Attempts:
2 left
💡 Hint
Spring Boot property binding is case-insensitive and supports relaxed binding.
✗ Incorrect
Spring Boot's relaxed binding allows property keys to be uppercase or lowercase and still bind correctly. So 'feature.ENABLED' binds to 'enabled' field.