# Spring Batch

Nivå: advanced | Målgrupp: Java programmerare | Förkunskaper: Stor erfarenhet av att skriva Java kod
https://www.ribomation.se/programmerings-kurser/spring-batch/

Spring Batch är ett ramverk, byggt ovanpå Spring Framework, som tillhandahåller alla man behöver för
att designa robusta och skalbara batch applikationer. Denna kurs lär dig allt om item-readers, item-processor,
item-writers, tasklets och mycket mer.

Batch applikationer innebär att behandla en stor mängd data sekventiellt utan interaktion eller avbrott.
Exempel är att beräkna månatliga bank sammanställningar, aggregera månatliga fakturor för en tjänst och
maila dessa som PDF till respektive kund och mycket mera.

Spring Batch är ett ramverk, byggt ovanpå Spring Framework, som tillhandahåller alla man behöver för
att designa robusta och skalbara batch applikationer.

Denna kurs lär dig allt om item-readers, item-processor, item-writers, tasklets och mycket mer, så att
du direkt efter kursen kan komma igång med att designa egna batch applikationer.

- Förstå hur en batch applikation är uppbyggd
- Kunna läsa och skriva till CSV, FLV, XML, JSON filer
- Kunna läsa och skriva till databaser, på ett effektivt sätt
- Designa transaktionella affärsoperationer i Spring Batch

#### Background & Overview
- What is a batch application
- Why Spring Batch was created
- Why do we need Spring Batch

#### Kickstart Project
You will be following simple instructions and step-by-step build your first Spring Batch application.
The purpose of this exercise is to show-case key components of a batch application.

#### Spring Batch Concepts
- Job
- Step
- Job Repository
- Job Instance
- Job Parameters
- Task-Oriented Steps vs. Item-Oriented Steps
- Chunks and Transactions
- Execution Context
- Using Spring Initializr to create a Batch project
- Program structure
- Essential Spring beans

#### Task-Oriented Steps
- What is a task-oriented step
- Tasklets
- System command tasklet
- Invoking existing business methods

#### Launching Jobs
- Understanding @EnableBatchProcessing
- Understanding BatchConfigurer
- How is a Job (normally) launched
- How to launch a selected set of Jobs
- Bean names vs. Job names
- Bean names vs. Configuration names
- How to trigger a job to launch
- What is a TaskExecutor
- Sample demo and its configuration
- How to launch a job from a REST controller
- How to periodically launch a job, using a Spring scheduler
- How to launch a job, when a new file appear in a directory
- Sample directory watcher

#### Item-Oriented Steps
- The different parts of a step
- Setting the chunk size
- Using the step-builder

#### Item Processing
- What is item processing
- Filtering items
- Validating items
- Declarative domain object validation
- Bean Validation API
- Chaining several item-processors

#### Flat Files
- What is a flat-file format
- File-file records
- Flat-file fields
- Understanding the FlatFileItemReader
- LineMapper
- LineTokenizer
- FieldSetMapper
- BeanWrapperFieldSetMapper
- Converters & ConversionServices
- understanding the FlatFileItemWriter
- LineAggregator
- FieldExtractor
- BeanWrapperFieldExtractor

#### CSV Files
- Character Separated Values (CSV)
- Sample domain class
- Reading a CSV file with FlatFileItemReader
- Writing a field-set mapper
- Using a bean-wrapper field-set mapper
- Using a builder to create a FlatFileItemReader
- Writing to a CSV file with FlatFileItemWriter
- Writing a field-extractor
- Using a bean-wrapper field-extractor
- Using a builder to create a FlatFileItemWriter

#### FLV Files
- Fixed Length Values (FLV)
- How Batch supports FLV
- FixedLengthTokenizer
- Sample FLV item reader
- FormatterLineAggregator
- Sample FLV item writer

#### JSON Files
- JavaScript Object Notation (JSON)
- JSON support in Batch
- The Jackson JSON framework
- Sample domain class annotations
- Sample domain class converters
- Using JsonItemReaderBuilder
- Using JsonItemWriterBuilder

#### XML Files
- Extensible Markup Language (XML)
- XML support in Batch
- DOM, SAX, StAX, OXM, ...
- Spring OXM
- JAXB
- Jaxb2Marshaller
- JAXB annotations
- Sample JAXB annotatated domain class
- MVN dependencies
- Using StaxEventItemReaderBuilder
- Using StaxEventItemWiterBuilder

#### Database Items
- Database item readers & writers
- DB ItemReader classes
- DB ItemWriter classes
- Understanding JdbcCursorItemReader
- Using JdbcCursorItemReaderBuilder, with a row-mapper
- Using JdbcCursorItemReaderBuilder, with a bean-mapper
- Understanding JdbcBatchItemWriter
- Using a JdbcBatchItemWriterBuilder with a prepared-statement setter
- Using a JdbcBatchItemWriterBuilder with a bean setter

#### What is new in Spring Batch v5
- Java features supported
- Support for GraalVM
- Factories become builders
