数据库驱动的功能切换
Database driven feature toggle
我想启用基于数据库值的新功能。如果为 feature 设置了数据库值,则应启用新代码。否则它应该切换并流向旧代码。有没有办法在 Java/Spring 中完成这个?我不想访问数据库 frequently.I 我正在考虑在请求开始时调用一次。这有什么例子吗?如果是这样,请告诉我。谢谢
创建功能 class 实施:
public enum CustomFeatures implements Feature {
@Label("Activates customFeature")
MY_CUSTOM_FEATURE;
public boolean isActive() {
return FeatureContext.getFeatureManager().isActive(this);
}
}
创建功能提供者:
@Bean
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(CustomFeatures.class);
}
创建实体和存储库:
@Entity
public class Feature {
private String name;
private Boolean active;
// getters-setters
}
创建将查询数据库并设置新功能状态的@Component
@Component
public class FeatureToggler {
private final FeatureRepository featureRepository;
private final FeatureManager featureManager;
private FeatureToggler(FeatureRepository featureRepository, FeatureManager featureManager) {
this.featureRepository = featureRepository;
this.featureManager = featureManager;
}
@Schedule(fixedRate=60000)
public void refreshFeatureToggles() {
featureManager.setFeatureState(new FeatureState(CustomFeatures.MY_CUSTOM_FEATURE, featureRepository.findByName().isActive);
}
}
现在您可以像这样检查功能是否启用:
if(CustomFeatures.MY_CUSTOM_FEATURE.isActive()) {
}
或使用Spring方面..
我想启用基于数据库值的新功能。如果为 feature 设置了数据库值,则应启用新代码。否则它应该切换并流向旧代码。有没有办法在 Java/Spring 中完成这个?我不想访问数据库 frequently.I 我正在考虑在请求开始时调用一次。这有什么例子吗?如果是这样,请告诉我。谢谢
创建功能 class 实施:
public enum CustomFeatures implements Feature {
@Label("Activates customFeature")
MY_CUSTOM_FEATURE;
public boolean isActive() {
return FeatureContext.getFeatureManager().isActive(this);
}
}
创建功能提供者:
@Bean
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(CustomFeatures.class);
}
创建实体和存储库:
@Entity
public class Feature {
private String name;
private Boolean active;
// getters-setters
}
创建将查询数据库并设置新功能状态的@Component
@Component
public class FeatureToggler {
private final FeatureRepository featureRepository;
private final FeatureManager featureManager;
private FeatureToggler(FeatureRepository featureRepository, FeatureManager featureManager) {
this.featureRepository = featureRepository;
this.featureManager = featureManager;
}
@Schedule(fixedRate=60000)
public void refreshFeatureToggles() {
featureManager.setFeatureState(new FeatureState(CustomFeatures.MY_CUSTOM_FEATURE, featureRepository.findByName().isActive);
}
}
现在您可以像这样检查功能是否启用:
if(CustomFeatures.MY_CUSTOM_FEATURE.isActive()) {
}
或使用Spring方面..