在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集成,您可以轻松地管理特性切换并利用它们的优点。

相关推荐
JohnYan1 小时前
Bun技术评估 - 03 HTTP Server
javascript·后端·bun
周末程序猿1 小时前
Linux高性能网络编程十谈|C++11实现22种高并发模型
后端·面试
ZHOU_WUYI1 小时前
Flask与Celery 项目应用(shared_task使用)
后端·python·flask
冒泡的肥皂2 小时前
强大的ANTLR4语法解析器入门demo
后端·搜索引擎·编程语言
IT_陈寒2 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端
有梦想的攻城狮3 小时前
spring中的@RabbitListener注解详解
java·后端·spring·rabbitlistener
Java水解3 小时前
MySQL DQL全面解析:从入门到精通
后端·mysql
Aurora_NeAr3 小时前
Apache Spark详解
大数据·后端·spark
程序员岳焱3 小时前
Java 程序员成长记(二):菜鸟入职之 MyBatis XML「陷阱」
java·后端·程序员
hello早上好3 小时前
BeanFactory 实现
后端·spring·架构