Fuentes de Configuración

Las fuentes de configuración son proveedores intercambiables que cargan valores de variables dinámicas en el DynamicExpressionRegistry al iniciar la aplicación. El sistema admite múltiples fuentes con un mecanismo de precedencia.

Descripción general

El ConfigurableValueSource la interfaz define cómo se cargan los valores desde fuentes externas:

public interface ConfigurableValueSource {
    String getName();
    List<ConfigurableValue> getValues();
    Integer getPrecedence();
}

Cada fuente proporciona:

  • Un nombre para identificación y registro

  • Una lista de valores configurables (globales y/o específicos de la entidad)

  • Un nivel de precedencia que determina el orden de procesamiento.

ConfigurableValue Tipos

Las fuentes de configuración devuelven instancias de ConfigurableValue(o su subclase ScopedConfigurableValue).

ConfigurableValue(Global)

Representa un valor de configuración global:

public class ConfigurableValue {
    private String key;     // e.g., "paymentService_upperBound"
    private Object value;   // e.g., 5000

    public boolean isScoped() {
        return false;  // Global values
    }
}

ScopedConfigurableValue(Alcance de la entidad)

Extiende ConfigurableValue para agregar la asociación de entidad:

@Data
public class ScopedConfigurableValue extends ConfigurableValue {
    private ProcessingEntity processingEntity;

    public ScopedConfigurableValue(String key, Object value, ProcessingEntity processingEntity) {
        super(key, value);
        this.processingEntity = Objects.requireNonNull(processingEntity, "ProcessingEntity is required");
    }

    @Override
    public boolean isScoped() {
        return true;  // Entity-scoped values
    }
}

Sistema de Precedencia

Se pueden registrar múltiples fuentes de configuración, y la precedencia determina el orden en el que se aplican. Los valores de precedencia más altos ganan- se procesan más tarde y sobrescriben los valores anteriores.

Processing order:

    Low precedence ──────────────────────> High precedence
         │                                        │
         v                                        v
    HOCON file                            Dynamic Settings
    (precedence: 5)                       (precedence: 10)

If both set "paymentService_upperBound":
    - HOCON sets 1000 (processed first)
    - Dynamic Settings sets 5000 (processed later, wins)
    - Final value: 5000

Niveles de Precedencia Predeterminados

El sistema define constantes de precedencia estándar:

public interface ConfigurableValueSource {
    Integer PRECEDENCE_HOCON = 5;           // Static configuration files
    Integer PRECEDENCE_DYNAMIC_SETTINGS = 10; // Runtime/database settings
}

Este pedido significa:

  1. Los archivos HOCON proporcionan la configuración base.

  2. Los ajustes dinámicos pueden anular configuraciones para ajustes específicos del entorno.