Enterprise Java Batch mit Spring
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Enterprise Java Batch mit Spring

  • 837 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
837
On Slideshare
829
From Embeds
8
Number of Embeds
2

Actions

Shares
Downloads
26
Comments
0
Likes
0

Embeds 8

http://blog.codecentric.de 4
http://127.0.0.1 4

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Dennis Schulte / Tobias Flohre | codecentric AGEnterprise Java Batch mitSpring
  • 2. codecentric AGDennis SchulteDüsseldorf@denschuwww.github.com/denschublog.codecentric.de/author/dscdennis.schulte@codecentric.dewww.codecentric.de
  • 3. codecentric AGTobias FlohreDüsseldorf@TobiasFlohrewww.github.com/tobiasflohreblog.codecentric.de/author/tobias.flohretobias.flohre@codecentric.dewww.codecentric.de
  • 4. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Neuigkeiten im Bereich Java Batch
  • 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. codecentric AGWAS IST EIN BATCH?Traditionelles Batch-PatternReader Processor Writer
  • 7. codecentric AGSPRING BATCHAutomatischesTransaktionsmanagementSkipRetryPersistenteJob-MetadatenRestartSkalierungsfeatures
  • 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. codecentric AGDOMAIN / KONFIGURATION / ABLAUFItemItemReaderItemProcessorStepJobItemWriterChunk
  • 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. 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. 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. codecentric AG****DOMAIN / KONFIGURATION / ABLAUFStepJobJobInstanceJobExecutionStepExecutionJobParametersInkassoKraftfahrtInkassoKraftfahrt am22.03.13InkassoKraftfahrt am22.03.13erster Versuch
  • 14. codecentric AG-  InfrastrukturkomponentenDOMAIN / KONFIGURATION / ABLAUF25.04.13 14JobRepositoryJobLauncherPlatformTransactionManager
  • 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. 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. codecentric AG-  Überspringen fehlerhafter ElementeRESTART / SKIP / LISTENER
  • 18. codecentric AGRESTART / SKIP / LISTENER
  • 19. codecentric AG-  Listener horchen auf bestimmte Events im Batch-Ablauf-  Verschiedene Typen-  JobExecutionListener-  StepExecutionListener-  ChunkListener-  ItemReadListener-  ItemProcessListener-  ItemWriteListener-  SkipListenerRESTART / SKIP / LISTENER
  • 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. 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. codecentric AGLaufzeitumgebungLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME25.04.13 22Spring ContainerSpring Batch ApplicationSpring Batch CoreSpring BatchInfrastructure
  • 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. codecentric AGstartJob.shTomcat/WebSphere/JBoss/MuleLAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME25.04.13 24Spring ContainerSpring Batch ApplicationHTTP EndpointTomcatMainframeJenkinsSpring Batch AdminSchedulerMetadatenLogs
  • 25. codecentric AGSPRING BATCH ADMIN
  • 26. codecentric AGSPRING BATCH ADMIN
  • 27. codecentric AGSPRING BATCH ADMIN
  • 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. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Laufzeitumgebung / Integration von Fremdsystemen-  Default-Funktionalität-  Test von Jobketten-  Neuigkeiten im Bereich Java Batch
  • 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. codecentric AG-  Abstrakte Job- und StepdefinitionenDEFAULT-FUNKTIONALITÄT
  • 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. codecentric AGAGENDA-  Grundlagen Spring Batch-  Enterprise Java Batch-  Laufzeitumgebung / Integration von Fremdsystemen-  Default-Funktionalität-  Test von Jobketten-  Neuigkeiten im Bereich Java Batch
  • 34. codecentric AGBuild à Release à Deploy à Test à RunCONTINUOUS DELIVERY25.04.13 34
  • 35. codecentric AGJOB PIPELINE25.04.13 35
  • 36. codecentric AGJOB PIPELINE25.04.13 36
  • 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. 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. 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. 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. 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. 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. 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. codecentric AGJSR 352: JAVA BATCH-  Interfaces vs. Annotationspublic class MyItemReader implementsItemReader {@Overridepublic T readItem() {...}}public class MyItemReader {@ReadItempublic T readItem() {...}}
  • 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. 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. 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