Spring Boot 4-mikrotjenester og REST API-er · leksjon

Lesere, prosessorer og skrivere

Bygg den chunk-orienterte batchflyten.

Leksjon 3 av 413 trinn

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 null
  • ItemProcessor transformerer; returverdien null filtrerer bort elementet
  • ItemWriter skriver en hel Chunk om gangen
  • Steget kobler alle tre sammen med en chunk-størrelse
Gratis å komme i gang

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

  1. Planlegging med @Scheduled
  2. Spring Batch-jobber og -trinn
  3. Lesere, prosessorer og skrivere
  4. Omstart og feilhåndtering
← Tilbake til Spring Boot 4-mikrotjenester og REST API-er