Spring Batch Persistence

Introduzione

Nel post Primi Passi con Spring Batch abbiamo visto un semplice esempio di job eseguito utilizzando il framework Spring Batch. In particolare abbiamo visto che per il suo corretto funzionamento tale framework ha bisogno di un repository dove persistere le informazioni relative alla esecuzione dei vari batch. A tale scopo il framework utilizza il componete JobRepository. Tecnicamente si tratta di una interfaccia che è implementata dalla classe del framework SimpleJobRepository che offre i propri servizi per mezzo dei DAO che gli sono iniettati.

Per semplificare la creazione di tale componente il framework introduce la classe AbstractJobRepositoryFactoryBean, ed in particolare vedremo due sue specializzazioni: MapJobRepositoryFactoryBean e JobRepositoryFactoryBean.

MapJobRepositoryFactoryBean

Questa classe factory automatizza la creazione di un SimpleJobRepository che utilizza DAO che implementano la persistenza in memoria. E’ quindi utilizzata principalmente per test e prototipizzazione rapida. Nell’utilizzare tale versione in-memory del SimpleJobRepository deve tenersi conto che:

  1. essendo volatile quindi non consente la riesecuzione dei job tra differenti esecuzione della JVM;
  2. non è adatta all’utilizzo nel caso di multi-threaded job o partitioned step;
  3. non garantisce che due job con gli stessi parametri non siano avviati contemporaneamente;
  4. non richiede un transaction manager;

La porzione di XML seguente mostra come configurare un in-memory JobRepository dove la proprietà transactionManager è ovviamente opzionale.

JobRepositoryFactoryBean

Questa classe factory automatizza la creazione di un SimpleJobRepository che utilizza DAO che implementano la persistenza mediante JDBC e la connessione verso un database. E’ richiesta quindi la configurazione di un datasource e sono supportati i principali RDBMS.

La porzione di XML seguente mostra come configurare un reporitory di tale tipologia.

 In questo caso è quindi necessario configurare il datasource e il transaction manager nel modo seguente:

Si noti che il framework offre anche i file SLQ per i drop e la creazione degli schema utilizzati. Accedendo alla cartella org/springframework/batch/core/ troverete, oltre ai file per MySQL, anche quelli per DB2, Derby, H2, HSQLDB, Oracle, PostGres, MS SqlServer e Sybase.

Una descrizione dettagliata dello schema utilizzato è disponibile nella documentazione ufficiale del framework, ed in particolare nell’Appendice B. Di seguito riportiamo per semplicità l’immagine delle tabelle e delle relazioni che intercorrono tra esse.

meta-data-erd