Lesere, prosessorer og skrivere
Bygg den chunk-orienterte batchflyten.
Lesere, prosessorer og skrivere er en gratis leksjon i Spring Boot 4-mikrotjenester og REST API-er på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Spring Boot 4-mikrotjenester og REST API-er, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Spring Boot 4-mikrotjenester og REST API-er inneholder totalt 4 leksjoner.
Trekløveret read-process-write
Et chunk-steg har tre samarbeidende komponenter:
- ItemReader – leverer elementer ett om gangen
- ItemProcessor – transformerer eller filtrerer et element
- ItemWriter – lagrer en chunk med elementer
ItemReader-grensesnittet
ItemReader.read() returnerer det neste elementet, eller null når inndataene er brukt opp. Spring Batch fortsetter å kalle metoden til den returnerer null.
public interface ItemReader<T> {
T read() throws Exception;
}FlatFileItemReader
For CSV-filer leser FlatFileItemReader linjer og mapper dem til objekter via en linjemapper.
@Bean
public FlatFileItemReader<Person> reader() {
return new FlatFileItemReaderBuilder<Person>()
.name("personReader")
.resource(new ClassPathResource("people.csv"))
.delimited()
.names("firstName", "lastName")
.targetType(Person.class)
.build();
}JdbcCursorItemReader
Bruk JdbcCursorItemReader eller JdbcPagingItemReader for å lese fra en database. Paging foretrekkes for svært store resultatsett, slik at en langvarig cursor ikke holdes åpen.
@Bean
public JdbcCursorItemReader<Person> dbReader(DataSource ds) {
return new JdbcCursorItemReaderBuilder<Person>()
.name("dbReader")
.dataSource(ds)
.sql("SELECT first_name, last_name FROM people")
.rowMapper(new PersonRowMapper())
.build();
}ItemProcessor-grensesnittet
ItemProcessor transformerer et inndataelement til et utdataelement. Inn- og utdatatypene kan være forskjellige.
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}Skrive en processor
Her gjør en processor navn om til store bokstaver. Det vanligste er å returnere et transformert objekt.
public class UpperCaseProcessor implements ItemProcessor<Person, Person> {
@Override
public Person process(Person p) {
return new Person(p.getFirstName().toUpperCase(),
p.getLastName().toUpperCase());
}
}Filtrere med processoren
Hvis en processor returnerer null, blir elementet filtrert bort og når aldri writer-en. Slik kan De hoppe over poster basert på forretningsregler.
public Person process(Person p) {
if (p.getLastName().isBlank()) {
return null; // drop this record
}
return p;
}ItemWriter-grensesnittet
ItemWriter mottar en chunk med elementer om gangen, ikke enkeltelementer. Dette gjør at skrivingen kan samles i én effektiv operasjon.
public interface ItemWriter<T> {
void write(Chunk<? extends T> chunk) throws Exception;
}JdbcBatchItemWriter
JdbcBatchItemWriter utfører en samlet SQL-insetting/-oppdatering for hele chunken, noe som er langt raskere enn å skrive rad for rad.
@Bean
public JdbcBatchItemWriter<Person> writer(DataSource ds) {
return new JdbcBatchItemWriterBuilder<Person>()
.dataSource(ds)
.sql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)")
.beanMapped()
.build();
}Koble dem sammen i et steg
Steget knytter triaden sammen med en chunk-størrelse. Elementene flyter fra reader -> processor -> writer i chunker.
return new StepBuilder("step1", repo)
.<Person, Person>chunk(50, tx)
.reader(reader())
.processor(new UpperCaseProcessor())
.writer(writer(ds))
.build();Egendefinerte readers og writers
De kan implementeres direkte for egendefinerte kilder (et REST-API, en kø). Spring tilbyr også ItemStream, slik at komponenten kan lagre og gjenopprette posisjonen sin ved omstarter.
Rask sjekk
Kontroller at De har forstått triaden.
Oppsummering
De satte sammen en chunk-pipeline:
ItemReader.read()returnerer elementer frem til nullItemProcessortransformerer; returverdien null filtrerer bort elementetItemWriterskriver en helChunkom gangen- Steget kobler alle tre sammen med en chunk-størrelse
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 24
- Leksjoner
- 93
Ofte stilte spørsmål
Er leksjonen «Lesere, prosessorer og skrivere» gratis?
Ja – hele teksten i «Lesere, prosessorer og skrivere» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Spring Boot 4-mikrotjenester og REST API-er-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Spring Boot 4-mikrotjenester og REST API-er inneholder totalt 4 leksjoner.
Hva lærer jeg i «Lesere, prosessorer og skrivere»?
Bygg den chunk-orienterte batchflyten. Du øver på Spring Boot 4-mikrotjenester og REST API-er med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Spring Boot 4-mikrotjenester og REST API-er?
Ingen tidligere erfaring er nødvendig. Spring Boot 4-mikrotjenester og REST API-er på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Lesere, prosessorer og skrivere»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Spring Boot 4-mikrotjenester og REST API-er-leksjonen?
Ja. Alle Spring Boot 4-mikrotjenester og REST API-er-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Planlegging med @Scheduled
- Spring Batch-jobber og -trinn
- Lesere, prosessorer og skrivere
- Omstart og feilhåndtering