Bird
Raised Fist0
Spring Bootframework~5 mins

@Profile for environment-specific beans in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
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
How do you specify multiple profiles in @Profile?
A@Profile("dev,test")
B@Profile({"dev", "test"})
C@Profile("dev" & "test")
D@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
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
Why use @Profile instead of if-else checks in code?
AIt keeps configuration clean and separate by environment
BIt makes the app slower
CIt disables beans permanently
DIt is required by Spring Boot
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

      1. 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.
      2. Step 2: Compare with other options

        Options A, C, and D relate to other Spring Boot features but not to environment-specific bean creation.
      3. Final Answer:

        To create beans only for specific environments -> Option C
      4. 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

      1. Step 1: Check correct syntax for @Profile

        The @Profile annotation requires a string value in quotes, e.g., @Profile("dev").
      2. 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.
      3. Final Answer:

        @Profile("dev") public class DevService {} -> Option A
      4. 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

      1. Step 1: Identify active profile and beans created

        With profile "prod" active, only ProdBean is created. DevBean is not created.
      2. 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.
      3. Step 3: Check the show() method

        In show(), bean is cast to ProdBean, which succeeds, returning "Production Bean".
      4. Final Answer:

        Production Bean -> Option B
      5. 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

      1. Step 1: Understand @Profile behavior with no active profile

        If no profile is active, Spring does not create beans annotated with any specific profile.
      2. Step 2: Analyze exception cause

        NoSuchBeanDefinitionException means Spring could not find a bean to inject because none were created due to missing active profile.
      3. Final Answer:

        No profile is active, so no beans with @Profile are created -> Option D
      4. 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

      1. Step 1: Understand @Profile multiple values usage

        Using @Profile({"dev", "test"}) means the bean is active if either "dev" OR "test" profile is active.
      2. 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.
      3. Final Answer:

        @Profile({"dev", "test"}) -> Option A
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard