首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Togglz功能状态更改通知

Togglz功能状态更改通知
EN

Stack Overflow用户
提问于 2016-03-13 21:52:41
回答 1查看 1.1K关注 0票数 1

我有两个应用程序- apidashboard。这两个应用程序都使用来自同一个数据库的相同功能。Togglz控制台仅在dashboard应用程序中处于活动状态。问题是,当我在dashboard应用程序中更改特性的状态时,api应用程序并没有立即意识到这一点。我需要重新启动我的api,以便刷新特性状态。

是否可以在不重新启动的情况下通知api应用程序功能状态的变化?

更新- Togglz配置添加了

这是Maven common项目中的基本配置(apidashboard项目依赖于此):

代码语言:javascript
复制
@Configuration
public class FeatureToggleConfiguration {

    @Autowired
    private DataSource dataSource;

    @Bean
    public FeatureManager getFeatureManager() {
        // @formatter:off
        FeatureManager featureManager = new FeatureManagerBuilder()
            .stateRepository(new CachingStateRepository(new JDBCStateRepository(dataSource)))
            .featureEnum(ApplicationFeatures.class)
            .userProvider(new SpringSecurityUserProvider(Authority.Type.ROLE_ADMIN.getName()))
            .build();
        // @formatter:on
        return featureManager;
    }

}

ApplicationFeatures(也放在common项目中):

代码语言:javascript
复制
public enum ApplicationFeatures implements Feature {

    // @formatter:off
    @EnabledByDefault
    @Label("Log Events Feature")
    LOG_EVENT_FEATURE,

    @EnabledByDefault
    @Label("Log Ok Sessions Feature")
    LOG_OK_SESSIONS_FEATURE,

    @EnabledByDefault
    @Label("Log HTTP Requests Data Feature")
    LOG_HTTP_REQUESTS_DATA_FEATURE;
    // @formatter:on

    public boolean isActive() {
        return FeatureContext.getFeatureManager().isActive(this);
    }

}

这是来自我的DashboardFeatureToggleConfiguration项目的dashboard (用于Togglz web控制台):

代码语言:javascript
复制
@Configuration
public class DashboardFeatureToggleConfiguration {

    @Bean
    public ServletRegistrationBean getTogglzConsole() {
        ServletRegistrationBean servlet = new ServletRegistrationBean();
        servlet.setName("TogglzConsole");
        servlet.setServlet(new TogglzConsoleServlet());
        servlet.setUrlMappings(Collections.singletonList("/togglz/*"));
        return servlet;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 07:50:30

您正在使用CachingStateRepository,这将导致您所描述的问题。你基本上有两种选择:

首先,您可以删除CachingStateRepository并直接使用JDBCStateRepository。这样,您将有更多的点击数据库,但这可能是可以接受的。所以您的配置如下所示:

代码语言:javascript
复制
.stateRepository(new JDBCStateRepository(dataSource))

我们可以为CachingStateRepository指定TTL值,这意味着缓存的条目只能在特定的时间内缓存:

代码语言:javascript
复制
.stateRepository(
   new CachingStateRepository(new JDBCStateRepository(dataSource), 10000)
)

在本例中,TTL设置为10000,这意味着功能状态将仅缓存10秒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35976329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档