Bird
Raised Fist0
Spring Bootframework~5 mins

Feature flags concept in Spring Boot

Choose your learning style10 modes available
Introduction

Feature flags let you turn parts of your app on or off without changing the code. This helps you test new features safely and control what users see.

You want to try a new feature with a small group of users before everyone.
You need to quickly disable a feature if it causes problems.
You want to release features gradually over time.
You want to run A/B tests to see which feature version works better.
You want to separate deployment from feature release.
Syntax
Spring Boot
public class FeatureFlagService {
    private Map<String, Boolean> featureFlags = Map.of(
        "newDashboard", true,
        "betaFeature", false
    );

    public boolean isFeatureEnabled(String featureName) {
        return featureFlags.getOrDefault(featureName, false);
    }
}

This example uses a simple map to store feature flags.

In real apps, flags can come from config files, databases, or remote services.

Examples
Check if the "newDashboard" feature is on, then show the right UI.
Spring Boot
if (featureFlagService.isFeatureEnabled("newDashboard")) {
    // show new dashboard
} else {
    // show old dashboard
}
Return different pages based on the feature flag.
Spring Boot
@GetMapping("/home")
public String home() {
    if (featureFlagService.isFeatureEnabled("betaFeature")) {
        return "betaHome";
    }
    return "regularHome";
}
Sample Program

This Spring Boot example shows a service holding feature flags and a controller that returns if a feature is enabled or not.

Spring Boot
package com.example.featureflags;

import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@Service
public class FeatureFlagService {
    private final Map<String, Boolean> featureFlags = Map.of(
        "newFeature", true,
        "experimentalUI", false
    );

    public boolean isFeatureEnabled(String featureName) {
        return featureFlags.getOrDefault(featureName, false);
    }
}

@RestController
public class FeatureController {

    private final FeatureFlagService featureFlagService;

    public FeatureController(FeatureFlagService featureFlagService) {
        this.featureFlagService = featureFlagService;
    }

    @GetMapping("/feature-status")
    public String featureStatus() {
        if (featureFlagService.isFeatureEnabled("newFeature")) {
            return "New Feature is ENABLED";
        } else {
            return "New Feature is DISABLED";
        }
    }
}
OutputSuccess
Important Notes

Feature flags help avoid risky code changes by controlling features at runtime.

Keep your flags organized and remove old ones to avoid clutter.

Use descriptive names for flags so everyone understands their purpose.

Summary

Feature flags let you turn features on or off without code changes.

They help test, release, and control features safely.

In Spring Boot, you can implement flags with a service and check them in your controllers.

Practice

(1/5)
1. What is the main purpose of using feature flags in a Spring Boot application?
easy
A. To improve database performance
B. To manage application logging levels
C. To handle user authentication
D. To enable or disable features without changing the code

Solution

  1. Step 1: Understand feature flags concept

    Feature flags allow toggling features on or off dynamically without redeploying code.
  2. Step 2: Identify the main use in Spring Boot

    In Spring Boot, feature flags help control feature availability safely during runtime.
  3. Final Answer:

    To enable or disable features without changing the code -> Option D
  4. Quick Check:

    Feature flags = toggle features dynamically [OK]
Hint: Feature flags toggle features without code changes [OK]
Common Mistakes:
  • Confusing feature flags with database optimization
  • Thinking feature flags manage authentication
  • Assuming feature flags control logging
2. Which of the following is the correct way to check a feature flag in a Spring Boot controller method?
easy
A. if(featureFlagService.isFeatureEnabled("newFeature")) { ... }
B. if(featureFlagService.checkFlag("newFeature")) { ... }
C. if(featureFlagService.enableFeature("newFeature")) { ... }
D. if(featureFlagService.toggleFeature("newFeature")) { ... }

Solution

  1. Step 1: Recall typical method naming for feature flags

    Common method to check if a feature is enabled is named like isFeatureEnabled.
  2. Step 2: Match method name with options

    Only if(featureFlagService.isFeatureEnabled("newFeature")) { ... } uses isFeatureEnabled which clearly indicates checking status.
  3. Final Answer:

    if(featureFlagService.isFeatureEnabled("newFeature")) { ... } -> Option A
  4. Quick Check:

    Check feature flag with isFeatureEnabled() [OK]
Hint: Look for method named isFeatureEnabled() to check flags [OK]
Common Mistakes:
  • Using methods that sound like they change state (enableFeature, toggleFeature)
  • Using incorrect method names not standard in feature flag services
3. Given the following Spring Boot code snippet, what will be the output if the feature flag "betaFeature" is disabled?
if(featureFlagService.isFeatureEnabled("betaFeature")) {
    System.out.println("Beta feature is ON");
} else {
    System.out.println("Beta feature is OFF");
}
medium
A. Beta feature is ON
B. Beta feature is OFF
C. No output
D. Runtime error

Solution

  1. Step 1: Understand the condition check

    The code prints "Beta feature is ON" only if the flag is enabled (true).
  2. Step 2: Analyze the flag state given

    The flag "betaFeature" is disabled, so isFeatureEnabled returns false, triggering the else block.
  3. Final Answer:

    Beta feature is OFF -> Option B
  4. Quick Check:

    Flag disabled = else block runs [OK]
Hint: Disabled flag triggers else block output [OK]
Common Mistakes:
  • Assuming disabled flag prints ON message
  • Expecting no output when else block exists
  • Thinking code throws error on false flag
4. Identify the error in this Spring Boot feature flag usage:
@GetMapping("/feature")
public String feature() {
    if(featureFlagService.isFeatureEnabled) {
        return "Feature ON";
    } else {
        return "Feature OFF";
    }
}
medium
A. Return type should be void
B. Incorrect HTTP method annotation
C. Missing parentheses when calling isFeatureEnabled method
D. Feature flag service not injected

Solution

  1. Step 1: Check method call syntax

    isFeatureEnabled is a method and must be called with parentheses ().
  2. Step 2: Verify other code parts

    HTTP annotation and return type are correct; no injection info given but not error here.
  3. Final Answer:

    Missing parentheses when calling isFeatureEnabled method -> Option C
  4. Quick Check:

    Method calls need () [OK]
Hint: Method calls always need parentheses () [OK]
Common Mistakes:
  • Forgetting () after method names
  • Confusing HTTP method annotations
  • Assuming return type must be void
5. You want to implement a feature flag in Spring Boot that disables a new payment method only for users in a "betaTesters" group. Which approach correctly combines feature flags with user context?
hard
A. Check if feature flag is enabled and user belongs to betaTesters before allowing payment
B. Enable feature flag globally and ignore user groups
C. Disable feature flag and allow all users access
D. Use feature flag only in frontend without backend checks

Solution

  1. Step 1: Understand combining feature flags with user context

    Feature flags can be combined with user group checks to control feature access precisely.
  2. Step 2: Evaluate options for correct logic

    Check if feature flag is enabled and user belongs to betaTesters before allowing payment correctly checks both the flag and user group before enabling the feature.
  3. Final Answer:

    Check if feature flag is enabled and user belongs to betaTesters before allowing payment -> Option A
  4. Quick Check:

    Feature flag + user group check = controlled access [OK]
Hint: Combine flag check with user group for precise control [OK]
Common Mistakes:
  • Ignoring user groups when using feature flags
  • Relying only on frontend checks
  • Enabling feature globally without restrictions
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