/ / es posible agrupar fragmentos en lotes de primavera - primavera, lote de primavera

se pueden anidar trozos en lotes de primavera - primavera, primavera-lote

Hola soy nuevo en el lote de primavera.

Tengo situación con el lote de primavera como a continuación:

Necesito ejecutar un lote para todas las promociones [Lista de promociones]

  • Para cada promoción necesito preparar una consulta dinámica con atributos de promoción y obtener todo el historial de transacciones y calcular los puntos promocionales para cada usuario

    Y aquí, con la consulta dinámica anterior, quise volver a leer desde el lote, ya que arroja resultados con un mínimo de 50 mil registros.

A continuación se muestra el proceso que estoy esperando. ¿Es esto posible en el lote de primavera?

  • Leer Promociones [Reader lee promociones una por una]
    • crear consulta y ponerla en contexto
    • pasarlo al siguiente lector
      • el lector lee las transacciones una por una
      • Procesar transacciones y calcular puntos.
    • procesador

Mi problema aquí es No poder escribir fragmentos anidados [uno para leer promociones y otro para leer transacciones].

Una alternativa es:

Participe el trabajo para cada Promoción, en este caso todas las promociones se ejecutarán al mismo tiempo, pero necesitamos ejecutar una después de la una.

¿Puede algún cuerpo sugerir alguna manera para esto?

Respuestas

1 para la respuesta № 1

No puede tener fragmentos anidados, por lo que puede codificar su propio CompositeItemReader como (pseudo-código):

class CompositeItemReader implements ItemReader<Transaction> {
ItemReader<Promotion> promotions;
ItemReader<Transaction> transactions;

public void setPromotions(ItemReader<Promotion> promotions) {...}

public Transaction read() {
Transaction item = transactions.read();
if(null == item) {
Promotion p = promotions.read();
if(null != p) {
// Close transactions reader, create dynamic query and open transaction reader
// Re-read item!
item = this.read();
}
}

return item;
}
}

pero recuerde registrar promociones y transacciones como flujo y recuerde administrar la capacidad de reinicio.
O, si está seguro de que cada Promoción tiene una Lista limitada <> de Transacciones asociadas, puede usar un ItemProcessor<Promotion,List<Transaction>> que convierten una sola promoción como (Dirigir Consultores de Artículos Basados ​​en Consultas):

class PromotionProcessor implements ItemProcessor<Promotion,List<Transaction>> {
public List<Transaction> process(Promotion item) {
Query q = <create dynamic query>;
return q.list();
}
}

Si no, una solución basada en PeekableItemReader y el titular de datos como la que se describe aquí

Espero que estas consideraciones puedan ser de ayuda! ¡Buen trabajo!