Enterprise Java Batch mit Spring

907 views

Published on

Slides of our (Tobias Flohre, Dennis Schulte) talk at JAX 2013.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
907
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Enterprise Java Batch mit Spring

  1. 1. Dennis Schulte / Tobias Flohre | codecentric AGEnterprise Java Batch mitSpring
  2. 2. codecentric AGDennis SchulteDüsseldorf@denschuwww.github.com/denschublog.codecentric.de/author/dscdennis.schulte@codecentric.dewww.codecentric.de
  3. 3. codecentric AGTobias FlohreDüsseldorf@TobiasFlohrewww.github.com/tobiasflohreblog.codecentric.de/author/tobias.flohretobias.flohre@codecentric.dewww.codecentric.de
  4. 4. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch
  5. 5. codecentric AGAGENDA-  Grundlagen Spring Batch-  Was ist ein Batch?-  Domain / Konfiguration / Ablauf-  Restart / Skip / Listener-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch
  6. 6. codecentric AGWAS IST EIN BATCH?Traditionelles Batch-PatternReader Processor Writer
  7. 7. codecentric AGSPRING BATCHAutomatischesTransaktionsmanagementSkipRetryPersistenteJob-MetadatenRestartSkalierungsfeatures
  8. 8. codecentric AGAGENDA-  Grundlagen Spring Batch-  Was ist ein Batch?-  Domain / Konfiguration / Ablauf-  Restart / Skip / Listener-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch
  9. 9. codecentric AGDOMAIN / KONFIGURATION / ABLAUFItemItemReaderItemProcessorStepJobItemWriterChunk
  10. 10. codecentric AG-  Job wird als Spring-Konfiguration erstellt-  Domain Specific Language manifestiert sich in XML-Namespace-  Zentrale Elemente-  job-  step-  tasklet-  chunk-  reader-  processor-  writer-  commit-intervalDOMAIN / KONFIGURATION / ABLAUF25.04.13 10<job id="myJob" ><step id="myStep" ><tasklet><chunk reader="myReader"processor="myProcessor" writer="myWriter"commit-interval="1" /></tasklet></step></job>
  11. 11. codecentric AG-  Reader, Processor und Writer implementieren bestimmte Interfaces-  ItemReader<T>-  T read()-  ItemProcessor<I,O>-  O process(I item)-  ItemWriter<T>-  void write(List<? extends T> items)-  Spring Batch bietet für sehr viele Use Cases Implementierungen an-  Lesen/Schreiben aus/in eine Datenbank-  Lesen/Schreiben aus/in ein Flat-File-  Lesen/Schreiben aus/in ein XML-File-  Lesen/Schreiben aus/in eine JMS-Queue-  Lesen/Schreiben mit JPA-  und viele mehrDOMAIN / KONFIGURATION / ABLAUF25.04.13 11
  12. 12. codecentric AGDOMAIN / KONFIGURATION / ABLAUF25.04.13 12Begin StepCommittransactionFinish StepFor each itemitem == null ||completionPolicyfulfilledtruefalselist of itemslist of itemsitem == nulltruefalseOpentransactionItemReaderItem read()ItemProcessorprocess(Item)ItemWriterwrite(List<Item>)
  13. 13. codecentric AG****DOMAIN / KONFIGURATION / ABLAUFStepJobJobInstanceJobExecutionStepExecutionJobParametersInkassoKraftfahrtInkassoKraftfahrt am22.03.13InkassoKraftfahrt am22.03.13erster Versuch
  14. 14. codecentric AG-  InfrastrukturkomponentenDOMAIN / KONFIGURATION / ABLAUF25.04.13 14JobRepositoryJobLauncherPlatformTransactionManager
  15. 15. codecentric AGAGENDA-  Grundlagen Spring Batch-  Was ist ein Batch?-  Domain / Konfiguration / Ablauf-  Restart / Skip / Listener-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch
  16. 16. codecentric AG****RESTART / SKIP / LISTENERStepJobJobInstanceJobExecutionStepExecutionJobParametersStart des JobsJobInstance mit JobParamsexistiert nicht -> wird angelegtJobExecution läuft losFehler!StepExecution, JobExecution undJobInstance erhalten StatusRestart des JobsJobInstance mit JobParamsexistiert -> Status?Neue JobExecution wird erzeugt,Zugriff auf ExecutionContextLauf erfolgreich
  17. 17. codecentric AG-  Überspringen fehlerhafter ElementeRESTART / SKIP / LISTENER
  18. 18. codecentric AGRESTART / SKIP / LISTENER
  19. 19. codecentric AG-  Listener horchen auf bestimmte Events im Batch-Ablauf-  Verschiedene Typen-  JobExecutionListener-  StepExecutionListener-  ChunkListener-  ItemReadListener-  ItemProcessListener-  ItemWriteListener-  SkipListenerRESTART / SKIP / LISTENER
  20. 20. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Laufzeitumgebung / Integration von Fremdsystemen-  Default-Funktionalität-  Test von Jobketten-  Neuigkeiten im Bereich Java Batch
  21. 21. codecentric AG-  Spring Batch schreibt keine Laufzeitumgebung vor-  Anwendungsframework!-  Viele Deploymentvarianten denkbar-  Wichtige Fragen-  Werden XA-Transaktionen benötigt?-  Wie fügt sich die Ausführung des Jobs in einen Prozess ein?-  In welcher Form und wo wird der Output benötigt?-  In welcher Form soll ein Monitoring stattfinden?LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
  22. 22. codecentric AGLaufzeitumgebungLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME25.04.13 22Spring ContainerSpring Batch ApplicationSpring Batch CoreSpring BatchInfrastructure
  23. 23. codecentric AGjava org.springframework.batch.core.launch.support.CommandLineJobRunner testJob.xml testJob date=2012/08/29-  Standalone, 1 JVM pro BatchLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME25.04.13 23CommandLineJobLauncherJobDB DateiShell-Skript
  24. 24. codecentric AGstartJob.shTomcat/WebSphere/JBoss/MuleLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME25.04.13 24Spring ContainerSpring Batch ApplicationHTTP EndpointTomcatMainframeJenkinsSpring Batch AdminSchedulerMetadatenLogs
  25. 25. codecentric AGSPRING BATCH ADMIN
  26. 26. codecentric AGSPRING BATCH ADMIN
  27. 27. codecentric AGSPRING BATCH ADMIN
  28. 28. codecentric AGLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME-  HTTP Endpoint mit Spring Integrationà curl –s --data-urlencode "jobParameters=datum=01.01.2013" http://localhost:8080/batch/jobs/testJob
  29. 29. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Laufzeitumgebung / Integration von Fremdsystemen-  Default-Funktionalität-  Test von Jobketten-  Neuigkeiten im Bereich Java Batch
  30. 30. codecentric AG-  Vorgaben für Entwickler-  Ressourcen-  JobRepository-  PlatformTransactionManager-  DataSources-  JMS-ConnectionFactory-  Abstrakte JMSTemplate-Definitionen-  Test nicht vergessen -> SpringJUnit4ClassRunnerDEFAULT-FUNKTIONALITÄT@Test  public  void  testLaunchJob()  throws  Exception  {        JobParameters  jobParameters  =  new  JobParametersBuilder().toJobParameters();          JobExecution  jobExecution  =  jobLauncher.run(job,  jobParameters);          assertEquals(BatchStatus.COMPLETED,  jobExecution.getStatus());  }  
  31. 31. codecentric AG-  Abstrakte Job- und StepdefinitionenDEFAULT-FUNKTIONALITÄT
  32. 32. codecentric AG-  Log-Files pro Job-Lauf-  Mapped Diagnostic Context -> Log-File-Name (thread-local)-  Format und Ausgabe des Job-Protokolls-  Job-Steuerung-  Revisionssichere Speicherung-  Mapping von Return-Codes-  Scheduler erwartet bestimmte CodesDEFAULT-FUNKTIONALITÄT
  33. 33. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Laufzeitumgebung / Integration von Fremdsystemen-  Default-Funktionalität-  Test von Jobketten-  Neuigkeiten im Bereich Java Batch
  34. 34. codecentric AGBuild à Release à Deploy à Test à RunCONTINUOUS DELIVERY25.04.13 34
  35. 35. codecentric AGJOB PIPELINE25.04.13 35
  36. 36. codecentric AGJOB PIPELINE25.04.13 36
  37. 37. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch-  Spring Batch 2.2-  JSR 352: Java Batch-  Spring Batch und Hadoop
  38. 38. codecentric AG-  In Entwicklung (bisher Release Candidate 1)-  Bugfixes und neue Features-  AmqpItemReader / AmqpItemWriter-  JobParameter bestimmen nicht zwangsläufig Identität-  Unterstützung für Java-basierte KonfigurationSPRING BATCH 2.2
  39. 39. codecentric AG-  Java-basierte Konfiguration (JavaConfig)  @EnableTransactionManagement  @Configuration  public  class  MyConfiguration  {    @Bean    public  MyComponent  component(){      return  new  MyComponent();    }    }  SPRING BATCH 2.2-  XML-basierte Konfiguration  <beans  …>    <tx:annotation-­‐driven/>      <bean  id="component“      class="de.codecentric.MyComponent"/>    </beans>
  40. 40. codecentric AG-  Neue Annotation: @EnableBatchProcessing-  Benötigt eine DataSource und erzeugt-  JobRepository, JobLauncher, JobRegistry-  DataSourceTransactionManager-  JobBuilderFactory, StepBuilderFactory@Configuration  @EnableBatchProcessing  public  class  InfrastructureConfiguration  {      @Bean      public  DataSource  dataSource(){          EmbeddedDatabaseBuilder  embeddedDatabaseBuilder  =  new  EmbeddedDatabaseBuilder();          return  embeddedDatabaseBuilder.addScript("…/schema-­‐hsqldb.sql").setType(EmbeddedDatabaseType.HSQL)              .build();      }  }  SPRING BATCH 2.2
  41. 41. codecentric AG@Configuration  public  class  JobConfiguration  {        @Autowired      private  JobBuilderFactory  jobBuilderFactory;      @Autowired      private  StepBuilderFactory  stepBuilderFactory;      @Bean      public  Job  job(){          return  jobBuilderFactory.get("job").start(step()).build();      }        @Bean      public  Step  step(){          return  stepBuilderFactory.get("step").chunk(1).reader(reader()).                processor(processor()).writer(writer()).build();      }      …  }  SPRING BATCH 2.2
  42. 42. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch-  Spring Batch 2.2-  JSR 352: Java Batch-  Spring Batch und Hadoop
  43. 43. codecentric AGJSR 352: JAVA BATCH-  JSR 352 = Java Specification Request für Java Batch-  Haupttreiber sind IBM/VMWare-  Chris Vignola: Specification Lead (IBM)-  Michael Minella, Wayne Lund (VMWare)-  Übernahme der Domain Language von Spring Batch in großen Teilen-  JSR definiert keine Infrastruktur
  44. 44. codecentric AGJSR 352: JAVA BATCH-  Interfaces vs. Annotationspublic class MyItemReader implementsItemReader {@Overridepublic T readItem() {...}}public class MyItemReader {@ReadItempublic T readItem() {...}}
  45. 45. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch-  Spring Batch 2.2-  JSR 352: Java Batch-  Spring Batch und Hadoop
  46. 46. codecentric AGSPRING BATCH UND HADOOP-  Spring Data: Apache Hadoop-  Version 1.0 seit 26.02.2013-  Beinhaltet Tools, Templates und Co. für eine Integration zwischen Spring undHadoop-  Hadoop Tasklet für Spring Batch-  Einbindung von Hadoop-Jobs in Spring Batch - Jobketten<batch:job  id="springBatchJob"  >    <batch:step  id="step">      <batch:tasklet  ref="myHadoopTasklet"/>    </batch:step>  </batch:job>  <hdp:tasklet  id="myHadoopTasklet"  job-­‐ref="myHadoopJob"  wait-­‐for-­‐job="true"/>  <hdp:job  id="myHadoopJob"  mapper="de.codecentric.MyMapper"  reducer="de.codecentric.MyReducer"      input-­‐path="/input"  output-­‐path="/output"/>  
  47. 47. codecentric AGFRAGEN?Dennis Schulte / Tobias Flohrecodecentric AGMerscheider Straße 142699 Solingentobias.flohre@codecentric.dedennis.schulte@codecentric.dewww.codecentric.dewww.mbg-online.deblog.codecentric.dewww.meettheexperts.de25.04.13 47

×