У меня есть два приложения - api
и dashboard
. Оба этих приложения используют одни и те же функции из одной и той же базы данных. Консоль Togglz активна только в dashboard
приложении. Проблема в том, что когда я изменяю состояние функции в своем dashboard
приложении, api
приложение не сразу узнает об этом. Мне нужно перезапустить мой api
, чтобы обновить состояние функций.
Можно ли уведомлять api
приложение об изменении состояния функции без перезапуска?
ОБНОВЛЕНО: добавлена конфигурация Togglz
Это базовая конфигурация в моем проекте Maven common
(проекты api
и dashboard
зависят от этого):
@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
):
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
(для веб-консоли Togglz) из моего проекта dashboard
:
@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;
}
}