ホームページ Java &#&チュートリアル Togglz による API 呼び出しと UI を使用した Spring Boot アプリケーションへの機能フラグ管理の実装

Togglz による API 呼び出しと UI を使用した Spring Boot アプリケーションへの機能フラグ管理の実装

Dec 30, 2024 pm 07:53 PM

Implementing Feature Flag Management in Your Spring Boot Application Using API Calls and UI with Togglz

現代のソフトウェア開発では、新しいコードをデプロイせずにライブ アプリケーションの機能を制御できることが重要です。機能フラグ管理と呼ばれるこの機能により、チームは機能をリアルタイムでオンまたはオフにできるため、継続的デリバリー、A/B テスト、カナリア リリースが可能になります。また、ユーザーへの新機能の公開を制御することで、新しい展開に関連するリスクを軽減する上でも重要な役割を果たします。

この記事では、Togglz を使用して Spring Boot アプリケーションに機能フラグ管理を実装するプロセスについて説明します。 Togglz を構成し、機能フラグを定義し、アプリケーション内での動作を制御する方法を見ていきます。

1. Spring Boot アプリケーションでの Togglz のセットアップ

Togglz を開始するには、必要な依存関係を Spring Boot プロジェクトに追加する必要があります。 build.gradle または pom.xml ファイルを開き、次の依存関係を追加します:

implementation 'org.togglz:togglz-spring-boot-starter:3.1.2'
implementation 'org.togglz:togglz-console:3.3.3'
ログイン後にコピー
ログイン後にコピー

これらの依存関係には、Togglz のコア機能と、機能フラグを管理するためのオプションの Web ベースのコンソールが含まれます。

2. Togglz

の構成

次に、Spring Boot アプリケーションで Togglz を構成する必要があります。これには、Togglz が機能フラグを管理するために使用する FeatureManager Bean のセットアップが含まれます。

その方法は次のとおりです:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.togglz.core.manager.FeatureManager;
import org.togglz.core.manager.FeatureManagerBuilder;
import org.togglz.core.repository.jdbc.JdbcStateRepository;
import org.togglz.core.user.NoOpUserProvider;

import javax.sql.DataSource;

@Configuration
public class TogglzConfiguration {

    private final DataSource dataSource;

    @Autowired
    public TogglzConfiguration(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Bean
    public FeatureManager featureManager() {
        return new FeatureManagerBuilder()
                .featureEnum(ProductCheckFeature.class)
                .stateRepository(new JdbcStateRepository(dataSource))
                .userProvider(new NoOpUserProvider())
                .build();
    }
}
ログイン後にコピー

説明:

  • DataSource: DataSource は、JdbcStateRepository によって使用されるために挿入されます。これにより、Togglz は機能フラグの状態をデータベースに保持できるようになります。
  • FeatureManager:FeatureManager は、FeatureManagerBuilder を使用して構築されます。機能を定義する列挙型 (ProductCheckFeature.class) を指定し、機能の状態を保存するために JdbcStateRepository を使用します。この例ではユーザーを機能に関連付けていないため、NoOpUserProvider を使用します。

3.列挙型を使用した機能フラグの定義

Togglz は列挙型を使用して機能フラグを定義します。列挙型の各定数は、オンまたはオフに切り替えることができる機能を表します。以下に例を示します:

import org.togglz.core.Feature;
import org.togglz.core.annotation.Label;

public enum ProductCheckFeature implements Feature {

    @Label("product-check")
    PRODUCT_CHECK,

}
ログイン後にコピー

説明:

Label: @Label アノテーションは、人間が読める形式の機能名を提供します。この名前を使用すると、Togglz コンソールに表示されます。

4.アプリケーションでの機能フラグの使用

機能フラグが定義され、設定が完了したら、アプリケーションでそれらの使用を開始できます。以下は、特定のコードを実行する前に機能がアクティブかどうかを確認する方法の例です:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.togglz.core.manager.FeatureManager;
import reactor.core.publisher.Mono;

import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    private final FeatureManager featureManager;
    private final ProductService productService;

    public ProductController(FeatureManager featureManager, ProductService productService) {
        this.featureManager = featureManager;
        this.productService = productService;
    }

    @GetMapping("/check")
    public Mono<ResponseEntity<?>> checkProduct(@RequestParam String isbn, HttpServletRequest httpServletRequest) {
        if (featureManager.isActive(ProductCheckFeature.PRODUCT_CHECK)) {
            return productService
                    .productCheck(isbn, JwtUtils.getUserJwt(httpServletRequest), Boolean.FALSE)
                    .flatMap(response -> Mono.just(ResponseEntity.ok(response)));
        } 
        return Mono.just(ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).body("Feature is disabled"));
    }
}
ログイン後にコピー

説明:

  • FeatureManager:FeatureManager はコントローラーに挿入され、PRODUCT_CHECK 機能がアクティブかどうかを確認するために使用されます。
  • 条件付きロジック: 機能がアクティブな場合、製品チェック操作が実行されます。それ以外の場合は、「機能は無効です」というメッセージが返されます。

5. Togglz コンソールによる機能フラグの管理

Togglz コンソールは、Web インターフェイスを通じて機能フラグを管理できる強力なツールです。 Togglz コンソールを有効にするには、次のプロパティを application.properties または application.yml ファイルに追加するだけです:

implementation 'org.togglz:togglz-spring-boot-starter:3.1.2'
implementation 'org.togglz:togglz-console:3.3.3'
ログイン後にコピー
ログイン後にコピー

Web ブラウザで /togglz-console に移動すると、コンソールにアクセスできます。コンソールには、機能のオン/オフ、戦略の変更、現在の状態の表示のための使いやすいインターフェイスが用意されています。

結論

Spring Boot アプリケーションに Togglz を使用して機能フラグ管理を実装することは、機能に対する強力な制御を提供する簡単なプロセスです。この記事で説明する手順に従うことで、機能フラグを簡単に構成、定義、管理できるため、自信と柔軟性を持って新機能をリリースできます。

新機能を段階的にロールアウトする場合でも、A/B テストを実施する場合でも、単に展開リスクを最小限に抑えたい場合でも、Togglz は Spring Boot アプリケーションにシームレスに統合する堅牢なソリューションを提供します。

コーディングを楽しんでください! ?

以上がTogglz による API 呼び出しと UI を使用した Spring Boot アプリケーションへの機能フラグ管理の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

See all articles