Finalización Automática de un Bulk

La finalización automática puede basarse en el tiempo (scheduled o 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 bulk se crea)

  • scheduled tiempo (por ejemplo, a medianoche)

  • disparadores de cierre automático (por ejemplo, componentFullnessAutoCloseTrigger (finalice el bulk 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 lleva a cabo la finalización automática del bulk será scheduled con la ayuda de la Scheduler. Los valores pueden ser cualquier cosa soportada por el 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

" "

A CRON expression se ingresa para el valor, que se analiza y en base al cual se realiza el cierre automático del bulk is scheduled. Si deseamos desactivar esta función, debemos especificar "" para el valor.

auto-close-triggers

Lista<String>

[] Empty array

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

finalise-on-auto-close

boolean

verdadero

valor booleano que describe si el bulk 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 en el bulk nivel y son parte de la configuración general para eso bulk Ejemplo de configuración:

ipf.bulker {
  configurations = [
    {
      name = "pain. 001. 001. 09"
      file-name-prefix = "bulk-"
      file-path = "/tmp/bulks"
      component-hierarchy {
        component-parser-name = "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 a la bulk el tiempo de creación se utilizará para el cierre automático scheduler

  4. Si deseamos desactivar el cierre automático del bulk, 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();
    }
}

La interfaz Client Component 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 el bulk se envía a la finalizada state

2 obtener Nombre
  • Nombre del disparador

Core Disparadores de Cierre Automático

Bulk Cierre Automático de Plenitud del Componente

A bulk está compuesto por varios componentes del mismo o diferente tipo; en nuestro caso, el tipo de componente no importa. Cuando el bulk llega a un cierto número de componentes (hijo bulks se tratan como componentes individuales), esto pasa automáticamente a una finalización state y otros componentes no pueden ser añadidos porque el bulk está cerrado.

'maximum-component-size' está configurado en el bulk nivel y son parte de la configuración general para eso bulk.

Config

Tipo

Valor por defecto

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 bulk configuración.

Bulk Tamaño Plenitud Cierre Automático

A bulk está compuesto por varios componentes del mismo o diferente tipo; en nuestro caso, el tipo de componente no importa. Cuando el bulk llega a un cierto número de componentes, esto pasa automáticamente a una finalización state y otros componentes no pueden ser añadidos porque el bulk está cerrado.

'maximum-bulk-size' está configurado en el bulk nivel y son parte de la configuración general para eso bulk.

Config

Tipo

Valor por defecto

Comentario

maximum-bulk-size

Largo

Long. MAX_VALUE

Propiedad que define el tamaño máximo de bulk. Definido por bulk configuración.