CI pre-commit Release Codecov License

Feature Flags

Подключение

Maven


<dependency>
    <groupId>ru.romanow</groupId>
    <artifactId>feature-flags</artifactId>
    <version>${feature-flags.version}</version>
</dependency>

Gradle

testImplementation "ru.romanow:feature-flags:$featureFlagsVersion"

Реализация

Классы, которые необходимо перезагружать при обновлении флагов:

  • Класс Features (@ConfigurationProperties(prefix = "features")) и beans, куда он autowired.
  • Beans, помеченные аннотациями @ConditionOnFeatureEnabled, ConditionOnFeatureDisabled и @DefaultFeatureImplementation.
  • Классы, где есть @Value("${features.*}).

Способы получения обновленного конфига:

  • Файл на host-машине:
    • classpath (by default) – не контролируется;
    • /opt/features.yml (контролируется переменной features.config.location).
  • Запросом к config-серверу.