Spring Batch – mo‡an alat za batch obrade -

42
MLADEN TRBOJEVIĆ Spring Batch moćan alat za batch obrade podataka

Transcript of Spring Batch – mo‡an alat za batch obrade -

Page 1: Spring Batch – mo‡an alat za batch obrade -

MLADEN TRBOJEVIĆ

Spring Batch – moćan alat za batch obrade podataka

Page 2: Spring Batch – mo‡an alat za batch obrade -

Batch obrade podataka

Batch obrade – skupne, serijske obrade velikih količina podataka bez potrebe za interakcijom s korisnicima

Vremenski određeni događaji

Periodična primjena poslovnih pravila nad velikih skupom podataka

Integracija informacija iz drugih dijelova organizacije ili iz vanjskog svijeta

Spring Batch

Page 3: Spring Batch – mo‡an alat za batch obrade -

Spring Batch

Open source alat

Sveobuhvatna podrška za batch obrade

Gotove, ponovno iskoristive funkcije za obradu velikih količina podataka:

Loggiranje

Upravljanje transakcijama

Skupljane statistike o izvršavanju poslova

Ponovno pokretanje poslova

Upravljanje resursima

Nije radni okvir za scheduliranje!

Spring Batch

Page 4: Spring Batch – mo‡an alat za batch obrade -

Scenariji korištenja

Poslovni scenariji:

Batch obradu periodično potvrditi (commit)

Konkurentna obrada – paralelno izvođenje zadataka

Ručno ili automatizirano restartanje uslijed prekida ili greške

Slijedna obrada međusobno zavisnih koraka

Djelomična obrada: preskakanje zapisa

Cijela obrada kao jedna transakcija - skup podataka za obradu relativno malen

Spring Batch

Page 5: Spring Batch – mo‡an alat za batch obrade -

Scenariji korištenja (2)

Tehnički ciljevi:

Batch developeri koriste Spring model programiranja; mogu se koncentrirati na poslovnu logiku, a radni okvir vodi brigu o infrastrukturi

Razdvajanje odgovornosti između infrastrukture, okoline za izvođenje obrade i same aplikacije za batch obradu

Pružiti osnovne, uobičajene servise kao sučelja koja mogu implementirati svi projekti

Pružiti jednostavne, defaultne implementacije osnovnih sučelja za izvođenje koji se mogu koristiti odmah (out of the box)

Spring Batch

Page 6: Spring Batch – mo‡an alat za batch obrade -

Scenariji korištenja (3)

Tehnički ciljevi:

Omogućiti jednostavno konfiguriranje, prilagođavanje i proširivanje servisa pomoću Spring radnog okvira

Svi postojeći osnovni servisi moraju se moći jednostavno zamijeniti ili proširiti, bez utjecaja na infrastrukturni sloj

Spring Batch

Page 7: Spring Batch – mo‡an alat za batch obrade -

Spring Batch arhitektura

Spring Batch

Page 8: Spring Batch – mo‡an alat za batch obrade -

Osnovni koncepti Spring Batcha

Spring Batch

JobLauncher Step Job

ItemReader

ItemProcessor

ItemWriter

JobRepository

1 *

1

1

1

1 1

1

Page 9: Spring Batch – mo‡an alat za batch obrade -

Job

Job – konfiguracija zadatka

Job sadrži korake (Steps) koji su logički povezani

U konfiguraciji se jobu pridružuje ime i određuje da li se može ponovno pokrenuti

Spring Batch

Page 10: Spring Batch – mo‡an alat za batch obrade -

Job - primjer

<job id="footballJob">

<step id="playerload" next="gameLoad"/>

<step id="gameLoad" next="playerSummarization"/>

<step id="playerSummarization"/>

</job>

Spring Batch

Page 11: Spring Batch – mo‡an alat za batch obrade -

JobInstance, JobExecution

Spring Batch

Job ZavrsetakDana zadatak

JobInstance

JobExecution

ZavrsetakDana zadatak za dan 01.06.2013.

Prvi pokušaj izvođenja zadatka ZavrsetakDana za dan 01.06.2013.

*

*

Page 12: Spring Batch – mo‡an alat za batch obrade -

Step

Svaki zadatak (job) se sastoji od jednog ili više koraka

Korak predstavlja neovisnu, slijednu fazu batch zadatka

Korak može biti jednostavan ili složen

Spring Batch

Page 13: Spring Batch – mo‡an alat za batch obrade -

Konfiguriranje i izvršavanje zadatka

Job ima tri obavezne zavisnosti: ime, JobRepository i listu koraka

<job id="footballJob">

<step id="playerload" parent="s1" next="gameLoad"/>

<step id="gameLoad" parent="s2" next="playerSummarization"/>

<step id="playerSummarization" parent="s3"/>

</job>

Spring Batch

Page 14: Spring Batch – mo‡an alat za batch obrade -

Ponovno pokretanje

Zadaci u Spring Batchu mogu se ponovno pokrenuti u slučaju neuspjeha

Postoje scenariji kada to ponašanje nije poželjno

<job id="footballJob" restartable="false">

...

</job>

Spring Batch

Page 15: Spring Batch – mo‡an alat za batch obrade -

Nasljeđivanje od roditeljskog zadatka

Kada grupa zadataka ima slične, ali ne potpuno iste konfiguracije

<job id="baseJob" abstract="true"> <listeners> <listener ref="listenerOne"/> </listeners> </job> <job id="job1" parent="baseJob"> <step id="step1" parent="standaloneStep"/> <listeners merge="true"> <listener ref="listenerTwo"/> </listeners> </job>

Spring Batch

Page 16: Spring Batch – mo‡an alat za batch obrade -

Konfiguriranje JobRepository-a

JobRepository se koristi za osnovne CRUD operacije za različite domenske objekte u Spring Batchu (JobExecution, StepExecution)

Koriste ga mnogi dijelovi radnog okvira (JobLauncher, Job, Step)

<job-repository id="jobRepository"

data-source="dataSource"

transaction-manager="transactionManager"

isolation-level-for-create="SERIALIZABLE"

table-prefix="BATCH_"

max-varchar-length="1000"

/>

Spring Batch

Page 17: Spring Batch – mo‡an alat za batch obrade -

Konfiguriranje JobLaunchera

<bean id="jobLauncher"

class="org.springframework.batch.core.launch.support.SimpleJobLauncher">

<property name="jobRepository" ref="jobRepository" />

</bean>

Jedina obavezna zavisnost za SimpleJobLauncher je repozitorij, jer se preko njega dohvaća JobExecution

Spring Batch

Page 18: Spring Batch – mo‡an alat za batch obrade -

JobLauncher

Spring Batch

Job JobLauncher Client Business

run() execute()

ExitStatus

JobExecution Sa ExitStatus.FINISHED ili FAILED

Page 19: Spring Batch – mo‡an alat za batch obrade -

Izvođenje zadatka

Za pokretanje zadatka potrebne su minimalno dvije stvari: Job i JobLauncher

Job se najčešće pokreće iz komandne linije ili iz web kontejnera

CommandLineJobRunner

bash$ java CommandLineJobRunner ZavrsteakDanaJob.xml ZavrsteakDana schedule.date(date)=2013/06/01

Spring Batch

Page 20: Spring Batch – mo‡an alat za batch obrade -

Izvođenje zadatka (2)

Web kontejner

Spring Batch

Job JobLauncher Controller

run() execute()

JobExecution

Page 21: Spring Batch – mo‡an alat za batch obrade -

Izvođenje zadatka (3)

@Controller public class JobLauncherController {

@Autowired JobLauncher jobLauncher; @Autowired Job job; @RequestMapping("/jobLauncher.html") public void handle() throws Exception{ jobLauncher.run(job, new JobParameters()); }

}

Spring Batch

Page 22: Spring Batch – mo‡an alat za batch obrade -

Napredno korištenje meta podataka

JobExplorer sučelje – dohvaćanje podataka iz repozitorija o postojećim izvršavanjima zadataka

JobRegistry – koristan ako nas zanima koji su sve zadaci dostupni u kontekstu

JobOperator – služi za zaustavljanje, ponovno pokretanje ili dohvaćanje sažetka o zadatku

Spring Batch

Page 23: Spring Batch – mo‡an alat za batch obrade -

Konfiguriranje koraka

Step je domenski objekt koji predstavlja nezavisnu, slijednu fazu batch obrade

Spring Batch

Step

ItemReader

ItemProcessor

ItemWriter

Page 24: Spring Batch – mo‡an alat za batch obrade -

Obrada u blokovima podataka

Spring Batch

ItemReader Step ItemProcessor ItemWriter

execute()

read()

item

read()

item

process(item)

item

process(item)

item

write(items)

ExitStatus

Page 25: Spring Batch – mo‡an alat za batch obrade -

Konfiguriranje koraka (2)

<job id="sampleJob" job-repository="jobRepository">

<step id="step1">

<tasklet transaction-manager="transactionManager">

<chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>

</tasklet>

</step>

</job>

Spring Batch

Page 26: Spring Batch – mo‡an alat za batch obrade -

Logika preskakanja (zanemarivanja)

<step id="step1">

<tasklet>

<chunk reader="flatFileItemReader" writer="itemWriter"

commit-interval="10" skip-limit="10">

<skippable-exception-classes>

<include class="org.springframework.batch.item.file.FlatFileParseException"/>

</skippable-exception-classes>

</chunk>

</tasklet>

</step>

Spring Batch

Page 27: Spring Batch – mo‡an alat za batch obrade -

TaskletStep

Obrada u blokovima podataka nije jedini način konfiguracije koraka

Na primjer, poziv procedure u bazi podataka

<step id="step1"> <tasklet ref="myTasklet"/> </step> <bean id="myTasklet"

class="org.springframework….MethodInvokingTaskletAdapter"> <property name="targetObject"> <bean class="org.mycompany.FooDao"/> </property> <property name="targetMethod" value="updateFoo" />

</bean>

Spring Batch

Page 28: Spring Batch – mo‡an alat za batch obrade -

Kontroliranje slijeda koraka

Slijedni tijek koraka

Spring Batch

Step A

Step B

Step C

Page 29: Spring Batch – mo‡an alat za batch obrade -

Kontroliranje slijeda koraka (2)

Uvjetovani slijed koraka

Spring Batch

Step A

Step B Step C

Uspješno?

DA NE

Page 30: Spring Batch – mo‡an alat za batch obrade -

Kontroliranje slijeda koraka (3)

<job id="job">

<step id="stepA" parent="s1">

<next on="*" to="stepB" />

<next on="FAILED" to="stepC" />

</step>

<step id="stepB" parent="s2" next="stepC" />

<step id="stepC" parent="s3" />

</job>

Spring Batch

Page 31: Spring Batch – mo‡an alat za batch obrade -

ItemReaderi i ItemWriteri

ItemReader – sredstvo za učitavanje podataka iz različitih tipova ulaza

FlatFile Item Readers

XML Item Readers

Database Item Readers

Sučelje za generičke ulazne operacije

public interface ItemReader<T> {

T read() throws Exception, UnexpectedInputException, ParseException;

}

Spring Batch

Page 32: Spring Batch – mo‡an alat za batch obrade -

ItemReaderi i ItemWriteri (2)

ItemWriter – sličan kao i Reader, samo za izlazne operacije

public interface ItemWriter<T> {

void write(List<? extends T> items) throws Exception;

}

ItemProcessor

public interface ItemProcessor<I, O> {

O process(I item) throws Exception;

}

Spring Batch

Page 33: Spring Batch – mo‡an alat za batch obrade -

Primjer iz prakse

1. Skinuti XML datoteku s web stranice

2. Ažurirati udruženja obrtnika s podacima iz datoteke

3. Skinuti zip arhivu s web stranice

4. U bazi podataka obrisati stare podatke

5. Iz skinute zip arhive popuniti bazu novim podacima o djelatnostima

6. Poslati mail u slučaju da je sve prošlo OK

Spring Batch

Page 34: Spring Batch – mo‡an alat za batch obrade -

Primjer iz prakse

<job id="updateUdruzenjaJob" xmlns="http://www.springframework.org/schema/batch"> <step id="downloadHokDatoteku" parent="simpleStep"

next="updateUdruzenja"> <tasklet ref="downloadFileUdruzenja"/> </step> <step id="updateUdruzenja" parent="simpleStep"

next="downloadExportIgeaPismoDatoteku"> <tasklet>

<chunk reader="itemUdruzenjaReader" writer="itemUdruzenjaWriter" commit-interval="50">

</chunk> </tasklet>

</step> <step id="downloadExportIgeaPismoDatoteku" parent="simpleStep"

next="obrisiSveIzHokPridruzivanje"> <tasklet ref="downloadFileIgeaPismo"/> </step>

Spring Batch

Page 35: Spring Batch – mo‡an alat za batch obrade -

Primjer iz prakse

<step id="obrisiSveIzHokPridruzivanje" parent="simpleStep" next="updateHokPridruzivanje">

<tasklet ref="obrisiSveHokPridruzivanje"/> </step> <step id="updateHokPridruzivanje" parent="simpleStep"

next="sendMailHok"> <tasklet>

<chunk reader="itemHokPridruzivanjeReader" writer="itemHokPridruzivanjeWriter" commit-interval="10000">

</chunk> </tasklet>

</step> <step id="sendMailHok" parent="simpleStep"> <tasklet ref="mailer"/> </step>

</job>

Spring Batch

Page 36: Spring Batch – mo‡an alat za batch obrade -

Skidanje datoteke s web stranice

<bean id="downloadFileUdruzenja" class="org.spring…MethodInvokingTaskletAdapter">

<property name="targetObject">

<bean class="hr.igea....DownloadFile">

<property name="putanjaDatoteke" value="${putanjaXmlDatoteke}" />

<property name="webAdresaDatoteke" value="${webAdresaXmlDatoteke}" />

</bean>

</property>

<property name="targetMethod" value="download" />

</bean>

Spring Batch

Page 37: Spring Batch – mo‡an alat za batch obrade -

Učitavanje XML datoteke

<bean id="itemUdruzenjaReader" class="org.springframework.batch.item.xml.StaxEventItemReader">

<property name="fragmentRootElementName" value="pokuo" />

<property name="resource" value="file:${putanjaXmlDatoteke}" />

<property name="unmarshaller" ref="udruzenjeMarshaller" />

</bean>

Spring Batch

Page 38: Spring Batch – mo‡an alat za batch obrade -

Učitavanje XML datoteke (2)

<bean id="udruzenjeMarshaller" class="org.springframework….XStreamMarshaller">

<property name="aliases">

<util:map id="udruzenjaAliases">

<entry key="pokuo" value="hr.igea….Udruzenje" />

<entry key="sifra" value="java.lang.String" />

<entry key="pokuoloc" value="java.lang.String" />

...

</util:map>

</property>

<property name="fieldAliases">

<util:map id="fieldAliases">

<entry key="hr.igea….Udruzenje.nazivUdruzenja" value="naziv" />

<entry key="hr.igea….Udruzenje.pttBroj" value="ptt_broj" />

...

</util:map>

</property>

</bean>

Spring Batch

Page 39: Spring Batch – mo‡an alat za batch obrade -

Zapisivanje podataka u bazu

<bean id="itemUdruzenjaWriter" class="hr.igea….UdruzenjaWriter">

public class UdruzenjaWriter implements ItemWriter<Udruzenje>{

@Autowired

private GenericDao dao;

public void write(List<? extends Udruzenje> udruzenja) throws Exception {

}

}

Spring Batch

Page 40: Spring Batch – mo‡an alat za batch obrade -

Scheduliranje pokretanja zadatka

<bean id="updateUdruzenjaTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="updateUdruzenjaDetail"/> <!-- izvedi svaki dan s pocetkom u 22h --> <property name="cronExpression" value="0 0 22 * * ?"/> </bean> <bean

class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="updateUdruzenjaTrigger"/> </list> </property> </bean>

Spring Batch

Page 41: Spring Batch – mo‡an alat za batch obrade -

Zaključak

Spring Batch je jednostavan, ali moćan alat koji omogućava obradu velikih količina podataka

Pruža gotove, ponovno iskoristive funkcije za batch obrade

Prilagodljiv i skalabilan

Napredni servisi (optimiziranje, particioniranje)

Spring Batch

Page 42: Spring Batch – mo‡an alat za batch obrade -

KRAJ!

HVALA NA PAŽNJI

Spring Batch