What is the purpose of the @Profile annotation in Spring Boot?
The @Profile annotation is used to mark beans that should only be created when a specific environment or profile is active. It helps manage environment-specific configurations easily.
Click to reveal answer
beginner
How do you activate a Spring profile when running your application?
You can activate a Spring profile by setting the spring.profiles.active property, for example in application.properties or as a command-line argument: --spring.profiles.active=dev.
Click to reveal answer
intermediate
Can a bean have multiple profiles using @Profile? How?
Yes, you can specify multiple profiles in @Profile by listing them as an array, like @Profile({"dev", "test"}). The bean will be created if any one of these profiles is active.
Click to reveal answer
beginner
What happens if no profile is active and a bean is annotated with @Profile("dev")?
The bean will NOT be created because its profile does not match the active profile. Only beans with no profile or matching profiles are created.
Click to reveal answer
beginner
How can @Profile help in real-life application development?
It allows you to define different beans or configurations for environments like development, testing, and production. For example, you can use a mock service in development and a real service in production without changing code.
Click to reveal answer
What does the @Profile("prod") annotation do on a Spring bean?
ADisables the bean permanently
BCreates the bean in all profiles except 'prod'
CCreates the bean only when the 'prod' profile is active
DCreates the bean regardless of profile
✗ Incorrect
The @Profile("prod") annotation ensures the bean is created only when the 'prod' profile is active.
How do you specify multiple profiles in @Profile?
A@Profile("dev,test")
B@Profile({"dev", "test"})
C@Profile("dev" & "test")
D@Profile("dev" | "test")
✗ Incorrect
Multiple profiles are specified as an array: @Profile({"dev", "test"}).
If no profile is active, which beans are created?
AOnly beans without any <code>@Profile</code> annotation
BOnly beans with <code>@Profile("default")</code>
CAll beans regardless of <code>@Profile</code>
DNo beans are created
✗ Incorrect
Only beans without any @Profile annotation are created if no profile is active.
How can you activate a profile when running a Spring Boot app from the command line?
Ajava -jar app.jar -Dspring.profile=dev
Bjava -jar app.jar -profile dev
Cjava -jar app.jar --profile=dev
Djava -jar app.jar --spring.profiles.active=dev
✗ Incorrect
Use --spring.profiles.active=dev to activate the 'dev' profile.
Why use @Profile instead of if-else checks in code?
AIt keeps configuration clean and separate by environment
Explain how @Profile helps manage different environments in a Spring Boot application.
Think about how you might use different settings or services in development versus production.
You got /4 concepts.
Describe the steps to create and activate a Spring bean only for the 'test' environment using @Profile.
Consider both the bean code and how to run the app with the profile active.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of the @Profile annotation in Spring Boot?
easy
A. To define the database connection URL
B. To schedule tasks at fixed intervals
C. To create beans only for specific environments
D. To handle HTTP requests in controllers
Solution
Step 1: Understand the role of @Profile
The @Profile annotation is used to mark beans that should only be created when a specific environment profile is active.
Step 2: Compare with other options
Options A, C, and D relate to other Spring Boot features but not to environment-specific bean creation.
Final Answer:
To create beans only for specific environments -> Option C
Quick Check:
@Profile controls bean creation per environment [OK]
Hint: Remember: @Profile controls which beans load per environment [OK]
Common Mistakes:
Confusing @Profile with @Component or @Service
Thinking @Profile sets database URLs
Assuming @Profile schedules tasks
2. Which of the following is the correct way to use @Profile on a Spring bean class for the "dev" environment?
easy
A. @Profile("dev")
public class DevService {}
B. @Profile(dev)
public class DevService {}
C. @Profile({dev})
public class DevService {}
D. @Profile(["dev"])
public class DevService {}
Solution
Step 1: Check correct syntax for @Profile
The @Profile annotation requires a string value in quotes, e.g., @Profile("dev").
Step 2: Analyze each option
@Profile(["dev"])
public class DevService {} uses square brackets, invalid Java annotation syntax. @Profile(dev)
public class DevService {} misses quotes around "dev", syntax error. @Profile({dev})
public class DevService {} uses braces but misses quotes around "dev", syntax error. @Profile("dev")
public class DevService {} uses correct quoted string syntax.
Final Answer:
@Profile("dev")
public class DevService {} -> Option A
Quick Check:
@Profile needs quoted string [OK]
Hint: Use quotes around profile names in @Profile [OK]
Common Mistakes:
Omitting quotes around profile names
Using square brackets instead of curly braces
Confusing array syntax with string
3. Given the following Spring Boot configuration and beans, what will be the output when the active profile is set to "prod"?
@Profile("dev")
@Component
public class DevBean {
public String getMessage() { return "Development Bean"; }
}
@Profile("prod")
@Component
public class ProdBean {
public String getMessage() { return "Production Bean"; }
}
@Component
public class BeanUser {
private final Object bean;
public BeanUser(@Autowired(required = false) Object bean) { this.bean = bean; }
public String show() { return bean == null ? "No Bean" : ((ProdBean)bean).getMessage(); }
}
medium
A. Development Bean
B. Production Bean
C. ClassCastException at runtime
D. No Bean
Solution
Step 1: Identify active profile and beans created
With profile "prod" active, only ProdBean is created. DevBean is not created.
Step 2: Analyze BeanUser constructor injection
BeanUser tries to autowire an Object bean with @Autowired(required = false). Spring injects the available ProdBean instance as it matches.
Step 3: Check the show() method
In show(), bean is cast to ProdBean, which succeeds, returning "Production Bean".
Final Answer:
Production Bean -> Option B
Quick Check:
Prod profile loads ProdBean successfully [OK]
Hint: Profile determines available beans for injection [OK]
Common Mistakes:
Thinking Object type causes injection failure
Expecting ClassCastException with matching profile
Confusing which beans load per profile
4. You have two beans annotated with @Profile("test") and @Profile("prod") respectively. When running the app with no active profile set, you get a NoSuchBeanDefinitionException. What is the most likely cause?
medium
A. The beans are not annotated with @Component
B. The beans have syntax errors in @Profile annotation
C. Spring Boot does not support @Profile annotation
D. No profile is active, so no beans with @Profile are created
Solution
Step 1: Understand @Profile behavior with no active profile
If no profile is active, Spring does not create beans annotated with any specific profile.
Step 2: Analyze exception cause
NoSuchBeanDefinitionException means Spring could not find a bean to inject because none were created due to missing active profile.
Final Answer:
No profile is active, so no beans with @Profile are created -> Option D
Quick Check:
No active profile means no profile-specific beans [OK]
Hint: Beans with @Profile need active profile to load [OK]
Common Mistakes:
Assuming beans load without active profile
Blaming syntax errors without checking profiles
Ignoring need for @Component on beans
5. You want to create a bean that is active in both "dev" and "test" profiles but not in "prod". Which @Profile annotation usage correctly achieves this?
hard
A. @Profile({"dev", "test"})
B. @Profile("dev & test")
C. @Profile("dev | test")
D. @Profile({"dev & test"})
Solution
Step 1: Understand @Profile multiple values usage
Using @Profile({"dev", "test"}) means the bean is active if either "dev" OR "test" profile is active.
Step 2: Analyze other options
@Profile("dev & test") and D use string with "&" which is invalid syntax for multiple profiles. @Profile("dev | test") uses "|" inside string which is not supported syntax.
Final Answer:
@Profile({"dev", "test"}) -> Option A
Quick Check:
Use array of profiles for OR condition in @Profile [OK]
Hint: Use array syntax for multiple profiles in @Profile [OK]
Common Mistakes:
Using string with & or | inside @Profile
Confusing AND and OR logic in profiles
Forgetting to use curly braces for multiple profiles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.