/ / je možné vložiť kúsky do jarnej dávky - jar, jarná dávka

je vnorené kusy v jarnej dávke možné - pružina, jarná dávka

Ahoj, som na jarnej dávke nový.

Mám situáciu s jarnou dávkou, ako je uvedené nižšie:

Musím spustiť dávku pre všetky propagácie [Zoznam propagácií]

  • Pre každú propagáciu potrebujem pripraviť dynamický dotaz s atribútmi propagácie a získať celú históriu transakcií a vypočítať propagačné body každému používateľovi

    A tu s vyššie uvedeným dynamickým dotazom som chcel prečítať znova z dávky, pretože vracia výsledky minimálne 50 tisíc záznamov.

Nižšie je uvedený postup, ktorý očakávam, je to možné v jarnej dávke?

  • Čítať propagačné akcie [Čitateľ prečíta propagácie jeden po druhom]
    • vytvoriť dotaz a dať ho do kontextu
    • odovzdať ho ďalšiemu čitateľovi
      • číta transakcie jeden po druhom
      • spracovávať transakcie a počítať body
    • procesor

Môj problém je tu: Nie je možné zapisovať vnorené kusy [jeden pre propagácie čítania a jeden pre čítanie transakcií].

Jednou z alternatív je:

Rozdeľte prácu pre každú propagáciu, v ktorej budú všetky propagácie prebiehať súbežne. Potrebujeme však spustiť jednu po druhej.

Môže na to nejaký orgán navrhnúť nejaký spôsob?

odpovede:

1 pre odpoveď č. 1

Nemôžete mať vnorený kus, takže môžete kódovať svoj vlastný CompositeItemReader (pseudokód):

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;
}
}

ale nezabudnite zaregistrovať propagácie a transakcie ako stream a nezabudnite spravovať reštart.
Ak ste si istí, že každá propagácia má obmedzený zoznam pridružených transakcií, môžete použiť a ItemProcessor<Promotion,List<Transaction>> ktoré prevádzajú jednu propagačnú akciu (čítacie jednotky založené na dopyte):

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

Else riešenie založené na PeekableItemReader a držiteľ údajov, ako je popísané tu

Dúfam, že tieto úvahy môžu byť užitočné! Dobrá práca!