在2024年使用Togglz在SpringBoot中构建功能切换

在2024年使用Togglz在SpringBoot中构建功能切换

功能切换(或功能标志)是一种强大的技术,允许开发人员在不部署新代码的情况下启用或禁用应用程序中的功能。

这支持持续集成和交付(CI/CD)实践,促进A/B测试,并帮助管理功能推出。

在本文中,我们将通过实际的代码示例探索在SpringBoot应用程序中构建功能切换的最佳方法。

为什么要使用功能切换?

功能切换具有以下几个优点:

  1. 增量发布:逐步向用户推出功能并监控其影响。
  2. A/B测试:测试一个特性的变化,以确定哪个性能更好。
  3. 持续部署:更频繁、更安全地将代码部署到生产环境。
  4. 即时回滚:如果出现问题,立即禁用功能。

在SpringBoot中实现功能切换

在SpringBoot中实现功能切换有几种方法,但最常见和最有效的方法之一是使用名为Togglz的库。

Togglz是一个Java库,旨在管理功能切换,它与SpringBoot无缝集成。

步骤1:添加Togglz依赖项

首先,将Togglz依赖项添加到build.gradle文件中:

scss 复制代码
implementation("org.togglz:togglz-spring-boot-starter:4.4.0")

步骤2:定义特征切换

接下来,通过创建一个实现Feature接口的枚举来定义您的功能切换:

less 复制代码
import org.togglz.core.Feature;
import org.togglz.core.annotation.EnabledByDefault;
import org.togglz.core.annotation.Label;
  
public enum MyFeatures implements Feature {

    @EnabledByDefault
    @Label("New Awesome Feature")  
    NEW_AWESOME_FEATURE,  
  
    @Label("Experimental Feature")  
    EXPERIMENTAL_FEATURE;  
  
}  

步骤3:配置切换

创建一个配置类来配置Togglz:

kotlin 复制代码
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.mem.InMemoryStateRepository;
import org.togglz.core.user.NoOpUserProvider;

@Configuration  
public class TogglzConfiguration {  
  
    @Bean  
    public FeatureManager featureManager() {  
        return new FeatureManagerBuilder()  
                .featureEnum(MyFeatures.class)  
                .stateRepository(new InMemoryStateRepository())
                .userProvider(new NoOpUserProvider())
                .build();  
    }
}

在这里,为了简单起见,我们使用内存中的状态存储库,但是您可以根据您的需求使用其他状态存储库,如JPA,MongoDB或Redis。

步骤4:在代码中使用功能切换

现在已经配置了Togglz,可以在应用程序代码中使用特性切换。

例如,您可以根据功能切换的状态获得不同的输出:

kotlin 复制代码
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.togglz.core.manager.FeatureManager;


@RestController
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class TestController {

    FeatureManager featureManager;

    @RequestMapping("/test")
    public String test() {
        return executeFeature();
    }
    
    public String executeFeature() {
        if (featureManager.isActive(MyFeatures.NEW_AWESOME_FEATURE)) {
            // Execute code for the new awesome feature  
            return "New Awesome Feature is enabled!";
        }

        // Execute fallback code
        return "New Awesome Feature is disabled.";
    }
}

步骤5:管理功能切换

您可以使用Togglz提供的Web控制台管理功能切换。将Togglz控制台依赖项添加到您的pom.xml

scss 复制代码
implementation("org.togglz:togglz-console-spring-boot-starter:4.4.0")

然后在应用程序属性中配置控制台:

ini 复制代码
togglz.console.enabled=true
togglz.console.secured=false
togglz.console.path=/togglz-console

** **请不要在生产中使用togglz.console.secured=false ****

在浏览器中导航到http://localhost:8080/togglz-console访问控制台,您将获得如下页面:

现在,您可以通过单击按钮关闭或打开切换。

就这样

功能切换对于现代软件开发来说是一个很有价值的工具,可以实现更安全、更灵活的功能部署。

通过将Togglz与SpringBoot集成,您可以轻松地管理特性切换并利用它们的优点。

相关推荐
你是狒狒吗几秒前
消息队列了解一哈
后端
Chandler2440 分钟前
Go语言 GORM框架 使用指南
开发语言·后端·golang·orm
蚂蚁在飞-2 小时前
Golang基础知识—cond
开发语言·后端·golang
程序员爱钓鱼8 小时前
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
后端·golang
言之。9 小时前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
diving deep10 小时前
XML简要介绍
xml·java·后端
编程乐学(Arfan开发工程师)11 小时前
06、基础入门-SpringBoot-依赖管理特性
android·spring boot·后端
编程乐学(Arfan开发工程师)11 小时前
05、基础入门-SpringBoot-HelloWorld
java·spring boot·后端
橘子海全栈攻城狮12 小时前
【源码+文档+调试讲解】党员之家服务系统小程序1
java·开发语言·spring boot·后端·小程序·旅游
冼紫菜12 小时前
Java开发中使用 RabbitMQ 入门到进阶详解(含注解方式、JSON配置)
java·spring boot·后端·rabbitmq·springcloud