FF4J 功能切换问题
FF4J feature toggling issue
目前我们是基于 Spring 的应用程序的 FF4J 切换框架,我们在其中使用 SpringJDBSC 存储。问题是目前我们在 DEV、UAT 等环境中部署了多个应用程序,为环境中的所有应用程序启用或禁用创建的功能。现在我想为每个应用程序设置 enable/disable 功能,例如在 DEV 环境中,App1 的功能 "TestFeature" 应该打开,而 app2 的功能应该关闭。关于如何实现这一点的任何建议都非常有帮助
每个应用程序都应该有一个参数 applicationName
让您知道某个功能是否被切换。该值可以是您的应用程序的 webContext 或配置文件中的 属性(如果您使用 Spring 引导,则为 application.properties
)。
创建一个 FlippingStrategy 评估这个值,这看起来像
示例应用程序名称策略:
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);
}
- 相应地更新您的功能
示例 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>
目前我们是基于 Spring 的应用程序的 FF4J 切换框架,我们在其中使用 SpringJDBSC 存储。问题是目前我们在 DEV、UAT 等环境中部署了多个应用程序,为环境中的所有应用程序启用或禁用创建的功能。现在我想为每个应用程序设置 enable/disable 功能,例如在 DEV 环境中,App1 的功能 "TestFeature" 应该打开,而 app2 的功能应该关闭。关于如何实现这一点的任何建议都非常有帮助
每个应用程序都应该有一个参数
applicationName
让您知道某个功能是否被切换。该值可以是您的应用程序的 webContext 或配置文件中的 属性(如果您使用 Spring 引导,则为application.properties
)。创建一个 FlippingStrategy 评估这个值,这看起来像
示例应用程序名称策略:
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);
}
- 相应地更新您的功能
示例 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>