[JAVA] Einführung der Bibliothek ff4j, die Feature Toggle mit Spring Boot realisiert

Was ist Feature Toggle?

Bereiten Sie beispielsweise, wie unten gezeigt, eine boolesche Variable mit dem Namen "useNewAlgorithm" vor, um einen neuen Algorithmus zu verwenden, und verwenden Sie sie in Situationen, in denen der neue Algorithmus und der alte Algorithmus gemäß dem Richtig / Falsch von "useNewAlgorithm" ordnungsgemäß verwendet werden.

  function reticulateSplines(){
    var useNewAlgorithm = false;
    // useNewAlgorithm = true; // UNCOMMENT IF YOU ARE WORKING ON THE NEW SR ALGORITHM
  
    if( useNewAlgorithm ){
      return enhancedSplineReticulation();
    }else{
      return oldFashionedSplineReticulation();
    }
  }
  
  function oldFashionedSplineReticulation(){
    // current implementation lives here
  }
  
  function enhancedSplineReticulation(){
    // TODO: implement better SR algorithm
  }

Das Feature-Flag wird häufig verwendet, wenn neue Features mit festem Release-Timing, kanarischen Releases, A / B-Tests usw. bereitgestellt werden.

FF4J

https://ff4j.github.io/ スクリーンショット 2020-01-07 22.29.42.png

FF4j ist eine Java-Bibliothek, die Feature Toggle leicht realisieren kann.

--Real-Time Schalten Sie die Umschaltung mithilfe der Webkonsole und der REST-API um

Verschiedene Funktionen wie sind vorgesehen.

Installationsverfahren

Ein Projekt erstellen

Erstellen Sie ein Projekt, indem Sie nur Spring Reactive Web, lombok aus Spring Initializr auswählen, das jeder liebt.

Einführung von FF4j

Fügen Sie pom.xml eine Abhängigkeit hinzu.

pom.xml


<dependency>
    <groupId>org.ff4j</groupId>
    <artifactId>ff4j-spring-boot-starter</artifactId>
    <version>1.8</version>
</dependency>

Erstellen Sie eine Bean-Definition und ein Feature für FF4j.

FF4JConfiguration.java


import org.ff4j.FF4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FF4JConfiguration {
    @Bean
    public FF4j ff4j() {
        FF4j ff4j = new FF4j()
                .createFeature(awesomeFeature())
                .createFeature(greatFeature())
                .createFeature(excellentFeature());
        return ff4j;
    }

    private Feature awesomeFeature() {
        return new Feature("AwesomeFeature", true);
    }

    private Feature greatFeature() {
        return new Feature("GreatFeature", false);
    }

    private Feature excellentFeature() {
        return new Feature("ExcellentFeature", false);
    }
}

Dieses Mal haben wir drei Funktionen definiert: "AwesomeFeature", "GreatFeature" und "ExcellentFeature" und nur "AwesomeFeature" aktiviert.

Implementieren Sie den Controller mit FF4j. Wenn in dem Controller, der nur eine einfache Nachricht zurückgibt, die drei definierten Funktionen aktiviert sind, wird sie der Nachricht entsprechend den Funktionen hinzugefügt.

GreetingController.java


@RestController
@RequiredArgsConstructor
public class GreetingController {

    //Konstruktorinjektion
    private final FF4j ff4j;

    @GetMapping
    public String greeting() {
        List<String> features = new ArrayList<>();
        addFeatures(features);
        String greeting = String.format("Hello, %s World!!", String.join(" ", features));

        return greeting;
    }

    //Verarbeitung jedes Features
    private void addFeatures(List<String> features) {
        if(ff4j.check("AwesomeFeature")) {
            features.add("Awesome");
        }

        if(ff4j.check("GreatFeature")) {
            features.add("Great");
        }

        if(ff4j.check("ExcellentFeature")) {
            features.add("Excellent");
        }
    }
}

Starten Sie die Anwendung und gehen Sie zu http: // localhost: 8080. スクリーンショット 2019-11-28 0.13.29.png

Standardmäßig ist "AwesomeFeature" aktiviert, daher wird die Nachricht als "Hallo, Awesome World!" Angezeigt.

Einführung in die Webkonsole

Als nächstes werden wir die Verwaltungskonsole von FF4j vorstellen. Im vorherigen Status war es erforderlich, Feature im Quellcode ein- / auszuschalten. Mit WebConsole ist es jedoch möglich, Feature ein- und auszuschalten, während die Anwendung ausgeführt wird.

Fügen Sie pom.xml eine Abhängigkeit hinzu.

<dependency>
	<groupId>org.ff4j</groupId>
	<artifactId>ff4j-web</artifactId>
	<version>1.8</version>
</dependency>
<dependency>
	<groupId>org.thymeleaf</groupId>
	<artifactId>thymeleaf</artifactId>
	<version>2.1.4.RELEASE</version>
</dependency>

Fügen Sie eine neue Bean-Definition hinzu.

@Configuration
@ConditionalOnClass({ConsoleServlet.class, FF4jDispatcherServlet.class})
@AutoConfigureAfter(FF4JConfiguration.class)
public class FF4JWebConfiguration extends SpringBootServletInitializer {

    @Bean
    public ServletRegistrationBean<FF4jDispatcherServlet> ff4jDispatcherServletRegistrationBean(FF4jDispatcherServlet ff4jDispatcherServlet)
    {
        ServletRegistrationBean<FF4jDispatcherServlet> bean = new ServletRegistrationBean<>(ff4jDispatcherServlet, "/ff4j-web-console/*");
        bean.setName("ff4j-console");
        bean.setLoadOnStartup(1);
        return bean;
    }

    @Bean
    @ConditionalOnMissingBean
    public FF4jDispatcherServlet getFF4jDispatcherServlet(FF4j ff4j) {
        FF4jDispatcherServlet ff4jDispatcherServlet = new FF4jDispatcherServlet();
        ff4jDispatcherServlet.setFf4j(ff4j);
        return ff4jDispatcherServlet;
    }

}

Starten Sie http: // localhost: 8080 / ff4j-web-console und greifen Sie darauf zu. スクリーンショット 2019-11-28 0.15.49.png

Sie können die aktuell definierten Funktionen im Menü "Funktionen" überprüfen. Die Funktion wird beim Ein- und Ausschalten des Schalters ein- und ausgeschaltet.

スクリーンショット 2019-11-28 0.17.32.png

GIF-Animationsdemo

Ich werde auch eine Demo der oben erläuterten Inhalte veröffentlichen, die mit GIF-Animationen aufgenommen wurden. Als Referenz. ff4j-demo.gif

Zusammenfassung

Ich gab eine kurze Einführung in FF4j. Feature Toggle ist eine leistungsstarke Technik. Wenn Sie jedoch keine Operationsrichtlinie festlegen, wird eine chaotische Codebasis erstellt. Daher möchte ich beim Betrieb vorsichtig sein. Es ist ein Rahmen erforderlich, z. B. das Trennen der DI-Merkmale für jedes Profil und das Definieren von Codierungsstandards und Überprüfungspunkten.

Referenz

martinFowler.com - FeatureToggle: https://martinfowler.com/articles/feature-toggles.html FF4j: https://ff4j.github.io/ Diesmal verwendetes Repository: https://github.com/IshinFUKUOKA/ff4j-demo

Recommended Posts

Einführung der Bibliothek ff4j, die Feature Toggle mit Spring Boot realisiert
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
Erstellen Sie Restapi mit Spring Boot (bis zum Ausführen der App)
Booten nach Umgebung mit Spring Boot of Maven
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Beschleunigen Sie das Testen von Validatoren, für die DI im Spring Boot erforderlich ist
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Spring Boot-Anwendung, die DB-Verbindungseinstellungen mit Parametern angibt
Einführung in Spring Boot Teil 1
Einfache Bibliothekseinführung mit Maven!
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
[Anfänger] Versuchen Sie, die REST-API für die Todo-App mit Spring Boot zu schreiben
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Hot Deploy mit Spring Boot-Entwicklung
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Nachricht erlöschen (Spring Boot)
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Ein Memo, das Spring Boot berührte
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
So lesen Sie Request Body mit Spring Boot + Spring Security mehrmals
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
HTTPS mit Spring Boot und Let's Encrypt
Versuchen Sie es mit Spring Boot mit VS-Code
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert