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 |
|---|---|---|---|
|
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. |
|
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. |
|
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. |
|
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
-
Si se especifica auto-close-by-age y schedule-at está desactivado (cadena vacía ""), se utilizará el tiempo de auto-close-by-age.
-
Si se especifica schedule-at y auto-close-by-age está desactivado (0s) como opción, se utilizará el tiempo de schedule-at.
-
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
-
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
|
| 2 | get Name
|
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 |
|
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 |
|
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. |