
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 e CLI.
FF4j é uma implementação do padrão Feature Toggle.
Alternância de Funcionalidades: Habilite e desabilite funcionalidades em tempo de execução - sem deploys. No seu código, implemente múltiplos caminhos protegidos por predicados dinâmicos (if/then/else).
Alternância Baseada em Papéis: Habilite 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 pelo Spring Security.
Alternância Baseada em Estratégia: Implemente predicados personalizados (Padrão Strategy) para avaliar se uma funcionalidade está habilitada. Alguns são fornecidos prontos: listas brancas/negras, baseados em tempo, baseados em expressão. Conecte fontes externas, como um mecanismo de regras Drools.
Alternância Orientada a 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 é selecionada em tempo de execução e, portanto, conduzida pelos status das funcionalidades.
Monitoramento de Funcionalidades: Para cada execução de funcionalidades, o ff4j avalia o predicado, portanto é possível coletar e registrar eventos, métricas para calcular painéis interessantes 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 suas aplicações de backend. Quase 10 idiomas disponíveis.
Ampla escolha de bancos de dados: Nosso orgulho: suportamos mais de 20 tecnologias de bancos de dados para armazenar suas funcionalidades, propriedades e eventos. Mesmo modelo de negócios, 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 API REST funcionando imediatamente. (Para ser usado no aplicativo backend. Agora compatível com Spring Boot 2x: 👉 SAMPLES
API REST: Opere o FF4j por meio de uma API WEB. Esse é o caminho para usar o ff4j com outras linguagens, especialmente frontends javascript (também: aproveite o FeatureStoreHttp para evitar que microsserviços se conectem diretamente ao banco de dados).
Armazene não apenas os status das funcionalidades, mas também qualquer valor de propriedade. Crie propriedades que você pode alterar em tempo de execução. É integrado com os frameworks mais utilizados, como Spring, Archaius, commons-config ou Consul.
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]
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). Aproveitando o JSR-107, ele 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 interage diretamente com os storages.
JMX e MBeans: Um conjunto limitado de operações pode ser realizado por meio do JMX. O ff4j expõe alguns MBeans para ler métricas ou alternar funcionalidades a partir de ferramentas externas (Nagios...). Nem todas as aplicações são baseadas na web (batches, shell, standalone...).