Spring Boot 4-mikrotjenester og REST-API'er · Lektion

Readers, processors og writers

Byg det chunk-baserede batchflow.

Lektion 3 af 413 trin

Readers, processors og writers er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Treenigheden læs-behandl-skriv

Et chunk-trin har tre samarbejdende komponenter:

  • ItemReader - leverer elementer ét ad gangen
  • ItemProcessor - transformerer eller filtrerer et element
  • ItemWriter - gemmer en chunk med elementer

ItemReader-interfacet

ItemReader.read() returnerer det næste element eller null, når inputtet er udtømt. Spring Batch bliver ved med at kalde den, indtil den returnerer null.

public interface ItemReader<T> {
    T read() throws Exception;
}

FlatFileItemReader

Til CSV-filer læser 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

Brug JdbcCursorItemReader eller JdbcPagingItemReader til at læse fra en database. Paging foretrækkes til meget store resultatsæt for at undgå at holde en lang cursor åben.

@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-interfacet

ItemProcessor transformerer et inputelement til et outputelement. Input- og outputtyperne kan være forskellige.

public interface ItemProcessor<I, O> {
    O process(I item) throws Exception;
}

Skrivning af en processor

Her konverterer en processor navne til store bogstaver. Det er almindeligt at returnere et transformeret objekt.

public class UpperCaseProcessor implements ItemProcessor<Person, Person> {
    @Override
    public Person process(Person p) {
        return new Person(p.getFirstName().toUpperCase(),
                          p.getLastName().toUpperCase());
    }
}

Filtrering med processoren

Hvis en processor returnerer null, bliver elementet filtreret fra og når aldrig skriveren. Sådan springer du poster over baseret på forretningsregler.

public Person process(Person p) {
    if (p.getLastName().isBlank()) {
        return null; // drop this record
    }
    return p;
}

ItemWriter-interfacet

ItemWriter modtager en chunk med elementer på én gang, ikke enkelte elementer. Det gør det muligt at samle skrivningen i én effektiv handling.

public interface ItemWriter<T> {
    void write(Chunk<? extends T> chunk) throws Exception;
}

JdbcBatchItemWriter

JdbcBatchItemWriter udfører en samlet SQL-insert/opdatering for hele chunken, hvilket er langt hurtigere end at skrive række for række.

@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();
}

Sådan kobler du dem ind i et trin

Trinnet forbinder de tre dele med en chunk-størrelse. Elementerne går fra reader -> processor -> writer i chunks.

return new StepBuilder("step1", repo)
        .<Person, Person>chunk(50, tx)
        .reader(reader())
        .processor(new UpperCaseProcessor())
        .writer(writer(ds))
        .build();

Brugerdefinerede readers og writers

Du kan implementere interfaces direkte til brugerdefinerede kilder, f.eks. en REST API eller en kø. Spring tilbyder også ItemStream, så din komponent kan gemme og gendanne sin position ved genstarter.

Hurtigt tjek

Kontrollér, om du har forstået de tre dele.

Opsummering

Du har samlet en chunk-pipeline:

  • ItemReader.read() returnerer elementer, indtil den returnerer null
  • ItemProcessor transformerer; returnering af null filtrerer elementet fra
  • ItemWriter skriver en hel Chunk på én gang
  • Trinnet forbinder alle tre med en chunk-størrelse
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
24
Lektioner
93

Ofte stillede spørgsmål

Er lektionen “Readers, processors og writers” gratis?

Ja — hele teksten til “Readers, processors og writers” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Readers, processors og writers”?

Byg det chunk-baserede batchflow. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Spring Boot 4-mikrotjenester og REST-API'er?

Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Readers, processors og writers”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Spring Boot 4-mikrotjenester og REST-API'er-lektion?

Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Planlægning med @Scheduled
  2. Spring Batch-jobs og trin
  3. Readers, processors og writers
  4. Genstart og fejlhåndtering
← Tilbage til Spring Boot 4-mikrotjenester og REST-API'er