Oktatóanyag: Funkciójelölők használata Spring Boot-alkalmazásokban

A Spring Boot Core szolgáltatásfelügyeleti kódtárai támogatják a spring boot-alkalmazások funkciójelzőinek implementálását. Ezek a kódtárak lehetővé teszik a funkciójelölők deklaratív hozzáadását a kódhoz.

A Funkciókezelési kódtárak a színfalak mögött is kezelik a funkciójelölő életciklusát. A kódtárak például frissítik és gyorsítótárazza a jelző állapotát, vagy garantálják, hogy a jelölő állapota nem módosítható a kéréshívás során. A Spring Boot-kódtár emellett integrációkat is kínál, beleértve az MVC-vezérlőműveleteket, az útvonalakat és a köztes szoftvereket.

Az Add feature flags to a Spring Boot app (Funkciójelölők hozzáadása Spring Boot-alkalmazáshoz) rövid útmutató számos módszert mutat be a funkciójelölők Spring Boot-alkalmazásokban való hozzáadására. Ez az oktatóanyag részletesebben ismerteti ezeket a módszereket.

Az oktatóanyag során a következőket fogja elsajátítani:

  • A funkció rendelkezésre állásának szabályozásához adjon hozzá funkciójelölőket az alkalmazás fő részeihez.
  • Integrálható App Configuration, amikor funkciójelölők kezelésére használja.

Funkciókezelés beállítása

A Spring Boot szolgáltatáskezelő FeatureManager a keretrendszer natív konfigurációs rendszeréből szerzi be a funkciójelölőket. Ennek eredményeképpen az alkalmazás funkciójelölőit bármely olyan konfigurációs forrás használatával definiálhatja, amelyet a Spring Boot támogat, beleértve a helyi bootstrap.yml fájlt vagy környezeti változókat. FeatureManager függőséginjektálásra támaszkodik. A szolgáltatásfelügyeleti szolgáltatásokat standard konvenciók használatával regisztrálhatja:

private FeatureManager featureManager;

public HelloController(FeatureManager featureManager) {
    this.featureManager = featureManager;
}

Javasoljuk, hogy tartsa meg a funkciójelölőket az alkalmazáson kívül, és külön kezelje őket. Ezzel bármikor módosíthatja a jelzőállapotokat, és azonnal érvénybe léptetheti ezeket a módosításokat az alkalmazásban. App Configuration egy központi helyet biztosít az összes funkciójelölő rendszerezéséhez és szabályozásához egy dedikált portál felhasználói felületén keresztül. App Configuration közvetlenül a Spring Boot-ügyfélkódtárakon keresztül kézbesíti a jelzőket az alkalmazásnak.

A Spring Boot-alkalmazást a legegyszerűbben a konfigurációszolgáltatón keresztül csatlakoztathatja App Configuration:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-feature-management-web</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-dependencies</artifactId>
        <version>5.8.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Funkciójelölő deklarációja

Minden funkciójelölő két részből áll: egy névből és egy vagy több szűrőből álló listából, amelyek annak kiértékelésére szolgálnak, hogy egy szolgáltatás állapota be van-e kapcsolva (azaz ha az Trueértéke ). A szűrő használati esetet határoz meg arra vonatkozóan, hogy mikor kell bekapcsolni egy funkciót.

Ha egy funkciójelölő több szűrővel rendelkezik, a rendszer addig halad végig a szűrőlistán, amíg az egyik szűrő nem határozza meg, hogy engedélyezni kell-e a funkciót. Ekkor be van kapcsolva a funkciójelző, és a rendszer kihagyja a fennmaradó szűrőeredményeket. Ha nincs szűrő, amely azt jelzi, hogy engedélyezni kell a funkciót, a funkciójelölő ki van kapcsolva.

A funkciókezelő támogatja az application.yml konfigurációs forrást a funkciójelölőkhöz. Az alábbi példa bemutatja, hogyan állíthat be funkciójelölőket egy YAML-fájlban:

feature-management:
  feature-a: true
  feature-b: false
  feature-c:
    enabled-for:
      -
        name: PercentageFilter
        parameters:
          Value: 50

Az YML-dokumentum szakasza konvenció feature-management szerint a funkciójelölő beállításaihoz használatos. Az előző példában három funkciójelölő látható a tulajdonságban EnabledFor definiált szűrőkkel:

  • feature-a be van kapcsolva.
  • feature-b ki van kapcsolva.
  • feature-c egy nevű szűrőt PercentageFilter határoz meg egy parameters tulajdonsággal. PercentageFilter egy konfigurálható szűrő. Ebben a példában PercentageFilter a jelölő 50%-os valószínűségét feature-c adja meg.

Funkciójelölő-ellenőrzések

A funkciókezelés alapvető mintája, hogy először ellenőrizze, hogy be van-e kapcsolva egy funkciójelölő. Ha igen, akkor a funkciókezelő futtatja a funkció által tartalmazott műveleteket. Például:

private FeatureManager featureManager;
...
if (featureManager.isEnabledAsync("feature-a").block()) {
    // Run the following code
}

Függőséginjektálás

A Spring Bootban függőséginjektálással érheti el a funkciókezelőt FeatureManager :

@Controller
@ConfigurationProperties("controller")
public class HomeController {
    private FeatureManager featureManager;

    public HomeController(FeatureManager featureManager) {
        this.featureManager = featureManager;
    }
}

Vezérlőműveletek

Az MVC-vezérlőkben a @FeatureGate attribútummal szabályozhatja, hogy egy adott művelet engedélyezve van-e. A következő Index műveletnek feature-a be kell kapcsolnia a futtatását:

@GetMapping("/")
@FeatureGate(feature = "feature-a")
public String index(Model model) {
    ...
}

Ha egy MVC-vezérlő vagy -művelet le van tiltva, mert a vezérlő funkciójelzője ki van kapcsolva, a rendszer egy regisztrált DisabledFeaturesHandler felületet hív meg. Az alapértelmezett DisabledFeaturesHandler interfész egy 404-es állapotkódot ad vissza az ügyfélnek választörzs nélkül.

MVC-szűrők

Az MVC-szűrőket beállíthatja úgy, hogy azok a funkciójelölő állapota alapján legyenek aktiválva. Az alábbi kód egy nevű FeatureFlagFilterMVC-szűrőt ad hozzá. Ez a szűrő csak akkor aktiválódik az MVC-folyamaton belül, ha feature-a engedélyezve van.

@Component
public class FeatureFlagFilter implements Filter {

    @Autowired
    private FeatureManager featureManager;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if(!featureManager.isEnabled("feature-a")) {
            chain.doFilter(request, response);
            return;
        }
        ...
        chain.doFilter(request, response);
    }
}

Útvonalak

Az útvonalak átirányításához funkciójelölőket használhat. A következő kód átirányítja a felhasználót a rendszerből feature-a :

@GetMapping("/redirect")
@FeatureGate(feature = "feature-a", fallback = "/getOldFeature")
public String getNewFeature() {
    // Some New Code
}

@GetMapping("/getOldFeature")
public String getOldFeature() {
    // Some New Code
}

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan implementálhat funkciójelölőket a Spring Boot-alkalmazásban a spring-cloud-azure-feature-management-web kódtárak használatával. További kérdésekért tekintse meg a referenciadokumentációt, amely tartalmazza a Spring Cloud Azure App Configuration kódtár működésével kapcsolatos összes részletet. A Spring Boot és a App Configuration szolgáltatásfelügyeleti támogatásával kapcsolatos további információkért tekintse meg az alábbi forrásanyagokat: