FF4J功能切换问题

时间:2017-12-22 06:34:11

标签: spring ff4j

目前我们是基于Spring的应用程序的FF4J切换框架,我们使用的是SpringJDBSC商店。问题是目前我们在DEV,UAT等环境中部署了多个应用程序,这些功能是在为环境中的所有应用程序启用或禁用时创建的。现在我想启用/禁用每个应用程序的功能,如功能" TestFeature"对于App1应为ON,对于DEV环境中为app2为OFF。关于如何实现这一点的任何建议都非常有用

1 个答案:

答案 0 :(得分:0)

  1. 每个应用程序都应该有一个参数applicationName,以便您了解功能是否已切换。此值可以是应用程序的webContext或配置文件中的属性(如果使用Spring Boot,则为application.properties)。

  2. 创建一个评估此值的FlippingStrategy,看起来像

示例ApplicationNameStrategy:

public class ApplicationNameStrategy extends AbstractFlipStrategy {

private String currentApplicationName = null;

public ApplicationNameStrategy() {}

public ApplicationNameStrategy() {
    currentApplicationName = //.. init the value here
}

/** {@inheritDoc} */
@Override
public void init(String featureName, Map<String, String> initParams) {
    super.init(featureName, initParams);
}

/** {@inheritDoc} */
@Override
public boolean evaluate(String featureName, FeatureStore store, FlippingExecutionContext executionContext) {
    // special sauce !
    return Arrays.asList(store.read(featureName).getCustomProperty("grantedApplications").split(",")).contains(currentApplicationName);
}
  1. 主动更新您的功能

示例ff4j.xml片段

<feature uid="myFeature" enable="true" description="description" >
   <custom-properties>
    <property name="grantedApplication"
              type="org.ff4j.property.domain.PropertyString" 
              value="appA,appB"  />
    </custom-properties>
    <flipstrategy class="ApplicationNameStrategy">
    </flipstrategy>
</feature>