import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class FeatureToggle static Properties properties; static { properties = new Properties(); try (InputStream inputStream = FeatureToggle.class.getClassLoader 文件中配置: new_feature_enabled=true 使用时: public class Main { public static void main(String[] args) { if (FeatureToggle.isFeatureEnabled
beta", defaults: new { controller = "Demo", action = "BetaRoute" }, constraints: new { featureToggle defaults: new { controller = "Demo", action = "NewFeatureRoute" }, constraints: new { featureToggle
export const FeatureToggle = ({ features, featureName, children }) => { if (! /featureToggleStatus'import { FeatureToggle } from '. features={{}} featureName="promotion618"> <DummyComponent /> </FeatureToggle> ) expect(component.find features={features} featureName="promotion618"> <DummyComponent /> </FeatureToggle> ) expect features={features} featureName="promotion618"> <DummyComponent /> </FeatureToggle> ) expect
配置变更时的回调处理@EventListenerpublicvoidhandleRefreshEvent(RefreshScopeRefreshedEventevent){log.info("配置已刷新,featureToggle :{},rateLimit:{}",featureToggle,rateLimit);//重新初始化相关资源reinitializeResources();}}热更新处理示例4.2版本管理与回滚机制生产环境的配置变更必须包含完善的版本管理
joinPoint.proceed(); } } /** * 基于功能开关的条件执行 */ @Around("@annotation(featureToggle Object executeByFeatureToggle(ProceedingJoinPoint joinPoint, FeatureToggle featureToggle) throws Throwable { String featureName = featureToggle.value(); featureToggle) throws Throwable { // 功能开关相关的切面逻辑 return joinPoint.proceed(); } dev", "test"}; } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface FeatureToggle
Componentpublic class ConfigRefreshService { @Value("${myapp.config.feature-toggle}") private String featureToggle
error_rate<0.1%) ) 工程师的长期主义修炼 每天多做这3件事: 1️⃣ 写“可删除的代码” :每个模块预留扩展点,就像乐高积木的凸起 2️⃣ 留“反悔的余地” :关键逻辑用FeatureToggle
://paulhammant.com/2013/03/04/facebook-tbd/ Fowler on feature toggle: http://martinfowler.com/bliki/FeatureToggle.html
RefreshScope实现: @RefreshScope @ConfigurationProperties(prefix = "feature-toggle") @Data public class FeatureToggle