
Framework de alternância de recursos para Java que permite ativação de recursos em tempo de execução, acesso baseado em papéis, alternância orientada por AOP, monitoramento, trilhas de auditoria e um console web com API REST.
FF4j é uma implementação do padrão Feature Toggle.
Feature Toggle: Ative e desative funcionalidades em tempo de execução - sem implantações. No seu código, implemente múltiplos caminhos protegidos por predicados dinâmicos (if/then/else).
Alternância baseada em papéis (Role-based Toggling): Ative funcionalidades não apenas com valores de flag, mas também controle o acesso com papéis e grupos (Canary Release). Diferentes frameworks suportados, começando por Spring Security.
Alternância baseada em estratégia (Strategy-based Toggling): Implemente predicados personalizados (Strategy Pattern) para avaliar se uma funcionalidade está ativada. Alguns são fornecidos prontos para uso: White/Black lists, baseado em tempo, baseado em expressões. Conecte fontes externas como um Drools rule engine.
Alternância orientada por AOP: Mantenha seu código limpo e legível: evite declarações if aninhadas, mas use anotações. Graças ao Spring AOP, a implementação alvo é escolhida em tempo de execução e, portanto, dirigida pelos estados das funcionalidades.
Monitoramento de Funcionalidades: Para cada execução de funcionalidade, o ff4j avalia o predicado; portanto, é possível coletar e registrar eventos e métricas para calcular belos dashboards ou traçar curvas de uso das funcionalidades ao longo do tempo.
Trilha de Auditoria: Cada ação (criar, atualizar, excluir, alternar) pode ser rastreada e salva na trilha de auditoria para solução de problemas. Com o gerenciamento de permissões (AuthorizationManager), é possível identificar usuários.
Console Web: Administre o FF4j (incluindo funcionalidades e propriedades) com a interface web. Empacotado como um servlet na biblioteca, você o exporá em seus aplicativos backend. Quase 10 idiomas disponíveis.
Ampla variedade de Bancos de Dados Nosso orgulho: suportamos 20+ tecnologias de bancos de dados para armazenar suas funcionalidades, propriedades e eventos. Mesmo modelo de negócio, múltiplas implementações. Graças aos pontos de extensão, é fácil construir o seu próprio.
Spring Boot Starter Importe a dependência ff4j-spring-boot-starter em seus microsserviços para obter o console web e a REST api funcionando imediatamente. (Para ser usado no aplicativo backend. Agora compatível com Spring Boot 2x: 👉 SAMPLES
REST Api Opere o FF4j por meio de uma API WEB. Este é o caminho para usar o ff4j com outras linguagens, especialmente frontends em javascript. (também: aproveite o FeatureStoreHttp para evitar que os microsserviços se conectem diretamente ao banco de dados.
Mais informações podem ser encontradas em ff4j.org ou na Documentação de Referência no wiki.
Página Inicial
Funcionalidades
Monitoramento
Este projeto existe graças a todas as pessoas que contribuem. [Contribua].
Obrigado a todos os nossos apoiadores! 🙏 [Torne-se um apoiador]
Apoie este projeto tornando-se um patrocinador. Seu logotipo aparecerá aqui com um link para o seu site. [Torne-se um patrocinador]
Propriedades (CMDB) Armazene não apenas estados de funcionalidades, mas também qualquer valor de propriedade. Crie propriedades que você pode alterar em tempo de execução. É integrado com os frameworks mais usados, como Spring, Archaius, commons-config ou Consul.
Cache (Distribuído) Avaliar predicados pode pressionar o banco de dados (alta taxa de acertos). O ff4j fornece caches locais e distribuídos para ajudar. (editar funcionalidade também invalida o cache). Utilizando JSR-107, suporta a maioria das soluções de cache.
Interface de Linha de Comando Para automatizar coisas ou porque as portas web podem estar bloqueadas (você sabe, produção...), você pode trabalhar via SSH usando nossa Interface de Linha de Comando (cli), nosso Shell #devOps. Ela interagirá diretamente com os storages.
JMX e MBeans Um conjunto limitado de operações pode ser realizado via JMX. O ff4j expõe alguns Mbeans para ler métricas ou alternar funcionalidades a partir de ferramentas externas (Nagios...). Nem todos os aplicativos são baseados na web (batches, shell, standalone...).