Finalización Automática de un Bulk

La finalización automática puede ser basada en el tiempo (programada o en intervalos periódicos), o podría basarse en las características del Bulk como el número de elementos o el tamaño total estimado del archivo de salida. El método de finalización se define en el momento en que el Bulk se crea primero. Actualmente, apoyamos tres tipos para la finalización automática:

  • periódico (por ejemplo, 20 segundos después de que se crea el volumen)

  • hora programada (por ejemplo, a medianoche)

  • disparadores de cierre automático (p. ej.componentFullnessAutoCloseTrigger(finalice el lote después de alcanzar el número máximo de componentes)

Config Tipo Predeterminado Comentario

scheduled-auto-close.auto-close-by-age

Duración

0

Valor de duración que define cuándo se programará la finalización automática del lote con la ayuda del Programador. Los valores pueden ser cualquier cosa soportada por java.time. Clase de duración, si deseamos excluir esta opción de la función, debemos especificar 0s para el valor.

scheduled-auto-close.schedule-at

Cadena

" "

Se introduce una expresión CRON para el valor, que se analiza y en función de la cual se programa el cierre automático del lote. Si deseamos desactivar esta función, debemos especificar "" para el valor.

auto-close-triggers

Lista<String>

[] Empty array

Los auto-close-triggers especifican una lista de desencadenantes que envían el lote al estado finalizado después de que se han cumplido ciertos criterios. Los valores pueden ser el nombre de cadena para la implementación concreta de AutoCloseTrigger interfaz. Si deseamos excluir esta opción de la función, debemos especificar [] para el valor.

finalise-on-auto-close

boolean

verdadero

valor booleano que describe si el lote debe ser finalizado después de ser cerrado automáticamente por cualquier disparador AutoClose) valor predeterminado verdadero.

Ejemplo:

scheduled-auto-close = {
    auto-close-by-age = 20s
    schedule-at = "*/10 * * ? * *"
}

Importante: scheduled-auto-close.auto-close-by-age, scheduled-auto-close.schedule-at y auto-close-triggers están configurados a nivel de conjunto y son parte de la configuración general para ese conjunto. Ejemplo de configuración:

ipf.bulker {
  configurations = [
    {
      name = "pain.001.001.09"
      file-name-prefix = "bulk-"
      file-path = "/tmp/bulks"
      component-hierarchy {
        insertion-point-finder = "xml"
        marker = "Document"
        children = [
          {
            marker = "CstmrCdtTrfInitn.PmtInf"
            children = [
              {
                before-elements = ["SplmtryData"]
                marker = "CdtTrfTxInf"
              }
            ]
          }
        ]
      }
      auto-close-triggers = ["customAutoCloseTrigger"]
      maximum-component-size = 50
      scheduled-auto-close = {
        auto-close-by-age = 30s
        schedule-at = "*/10 * * ? * *"
      }
      finalise-on-auto-close = true
    }
]
}

Elección de Qué Hora Utilizar

  1. Si se especifica auto-close-by-age y schedule-at está desactivado (cadena vacía ""), se utilizará el tiempo de auto-close-by-age.

  2. Si se especifica schedule-at y auto-close-by-age está desactivado (0s) como opción, se utilizará el tiempo de schedule-at.

  3. Si ambos valores están especificados para scheduling, el valor más cercano al tiempo de creación masiva se utilizará para el cierre automático.scheduler

  4. Si deseamos desactivar el cierre automático del lote, es necesario configurar auto-close-by-age = 0s y schedule-at = "".

@RequiredArgsConstructor
@Value
public class ScheduleAutoClose {

    Duration autoCloseByAge;
    String scheduleAtCron;

    @SneakyThrows
    public Instant scheduleAt(Instant createdAt) {
        if (autoCloseByAge == null && (scheduleAtCron == null || scheduleAtCron.isEmpty())) {
            throw new IllegalStateException("At least one of autoCloseByAge or scheduleAtCron must be set");
        }

        if (autoCloseByAge == null) {
            CronExpression cronExpression = new CronExpression(scheduleAtCron);
            return Objects.requireNonNull(
                            cronExpression.getNextValidTimeAfter(
                                    Date.from(createdAt.atZone(ZoneId.systemDefault()).toInstant())))
                    .toInstant();
        }

        if (scheduleAtCron == null || scheduleAtCron.isEmpty()) {
            return createdAt.plus(autoCloseByAge);
        }

        CronExpression cronExpression = new CronExpression(scheduleAtCron);
        Instant cronInstant = Objects.requireNonNull(
                cronExpression.getNextValidTimeAfter(
                                Date.from(convertToTimeZonedInstant(createdAt)))
                        .toInstant());
        Instant byAge = createdAt.plus(autoCloseByAge);
            return cronInstant.isBefore(byAge) ? cronInstant : byAge;
    }

    private Instant convertToTimeZonedInstant(Instant createdAt) {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        return Date.from(createdAt).toInstant();
    }
}

El Client Component la interfaz se define de la siguiente manera.

public interface AutoCloseTrigger {
    boolean isTriggered(AutoCloseContext context); (1)
    String getName(); (2)
}
1 is Triggered
  • Define la condición después de la cual la carga se envía al estado finalizado.

2 get Name
  • Nombre del disparador

Core Disparadores de Cierre Automático

Bulk Cierre Automático de Plenitud del Componente

Un lote está compuesto por un número de componentes del mismo o diferente tipo; en nuestro caso, el tipo de componente no importa. Cuando el lote alcanza un cierto número de componentes (los lotes secundarios se tratan como componentes individuales), este pasa automáticamente a un estado de finalización y no se pueden añadir otros componentes porque el lote está cerrado.

'maximum-component-size' está configurado a nivel de volumen y es parte de la configuración general para ese volumen.

Config

Tipo

Valor predeterminado

Comentario

maximum-component-size

Largo

Long. MAX_VALUE

Propiedad que define el número máximo de componentes que un bulk puede contener. Definido por configuración de bulk.

Bulk Tamaño Plenitud Cierre Automático

Un lote está compuesto por un número de componentes del mismo o diferente tipo; en nuestro caso, el tipo de componente no importa. Cuando el lote alcanza un cierto número de componentes, este pasa automáticamente a un estado de finalización y no se pueden añadir otros componentes porque el lote está cerrado.

'maximum-bulk-size' está configurado a nivel de volumen y es parte de la configuración general para ese volumen.

Config

Tipo

Valor por defecto

Comentario

maximum-bulk-size

Largo

Long. MAX_VALUE

Propiedad que define el tamaño máximo de la carga a granel. Definido por la configuración de carga a granel.