
Marco de alternancia de funciones para Java que permite la activación de funciones en tiempo de ejecución, acceso basado en roles, alternancia impulsada por AOP, monitoreo, pistas de auditoría y una consola web con API REST.
FF4j es una implementación del patrón Feature Toggle.
Feature Toggle: Activa y desactiva funciones en tiempo de ejecución, sin despliegues. En tu código, implementa múltiples rutas protegidas por predicados dinámicos (if/then/else).
Alternancia basada en roles: Habilita funciones no solo con valores de bandera (flags), sino que también controla el acceso con roles y grupos (Canary Release). Se admiten diferentes frameworks, empezando por Spring Security.
Alternancia basada en estrategias: Implementa predicados personalizados (patrón Strategy) para evaluar si una función está activada. Algunos se proporcionan de serie: listas blancas/negras, basados en tiempo, basados en expresiones. Conecta fuentes externas como un motor de reglas Drools.
Alternancia impulsada por AOP: Mantén tu código limpio y legible: evita las sentencias if anidadas y usa anotaciones. Gracias a Spring AOP, la implementación de destino se selecciona en tiempo de ejecución y, por tanto, está impulsada por el estado de las funciones.
Monitorización de funciones: Para cada ejecución de una función, ff4j evalúa el predicado, por lo que es posible recopilar y registrar eventos y métricas para calcular bonitos paneles (dashboards) o dibujar curvas de uso de funciones a lo largo del tiempo.
Traza de auditoría: Cada acción (crear, actualizar, eliminar, alternar) se puede rastrear y guardar en la traza de auditoría para la resolución de problemas. Con la gestión de permisos (AuthorizationManager) es posible identificar a los usuarios.
Consola web: Administra FF4j (incluidas funciones y propiedades) con la interfaz web. Empaquetada como un servlet en la librería, la exponerás en tus aplicaciones backend. Disponible en casi 10 idiomas.
Amplia variedad de bases de datos: Nuestro orgullo: soportamos más de 20 tecnologías de bases de datos para almacenar tus funciones, propiedades y eventos. Mismo modelo de negocio, múltiples implementaciones. Gracias a los puntos de extensión es fácil crear la tuya propia.
Spring Boot Starter: Importa la dependencia ff4j-spring-boot-starter en tus microservicios para que la consola web y la API REST funcionen de inmediato. (Para usar en la aplicación backend. Ahora compatible con Spring Boot 2x: 👉 SAMPLES
API REST: Opera FF4j a través de una API web. Esta es la vía para usar ff4j con otros lenguajes, especialmente frontends de JavaScript. (También: apóyate en FeatureStoreHttp para evitar que los microservicios se conecten directamente a la base de datos.
Propiedades (CMDB): Almacena no solo estados de funciones, sino también cualquier valor de propiedad. Crea propiedades que puedas cambiar en tiempo de ejecución. Se integra con los frameworks más utilizados como Spring, Archaius, commons-config o Consul.
Puedes encontrar más información en ff4j.org o en la Documentación de referencia en el wiki.
Consulta la guía de inicio aquí
Página de inicio
Funciones
Monitorización
Este proyecto existe gracias a todas las personas que contribuyen. [Contribuir].
¡Gracias a todos nuestros mecenas! 🙏 [Conviértete en mecenas]
Apoya este proyecto convirtiéndote en patrocinador. Tu logotipo aparecerá aquí con un enlace a tu sitio web. [Conviértete en patrocinador]
Caché (distribuida): Evaluar predicados puede ejercer presión sobre la base de datos (alta tasa de aciertos). ff4j proporciona cachés locales y distribuidas para ayudar. (editar una función también expulsa la caché). Aprovechando JSR-107, soporta la mayoría de las soluciones de caché.
Interfaz de línea de comandos: Para automatizar tareas o porque los puertos web pueden estar bloqueados (ya sabes, producción...) puedes trabajar a través de SSH usando nuestra interfaz de línea de comandos (CLI), nuestra Shell #devOps. Interactuará directamente con los almacenes.
JMX y MBeans: Se puede realizar un conjunto limitado de operaciones a través de JMX. ff4j expone algunos MBeans para leer métricas o alternar funciones desde herramientas externas (Nagios...). No todas las aplicaciones están basadas en web (lotes, shell, standalone...).