Ausgabe
Ich mache Batch-Prozess mit Spring Batch.
Ich beabsichtige, Spring Batch in das Spring-Webmvc-Projekt zu integrieren.
Aber wenn ich den spring-webmvc-Server starte, werden die ItemReader-, ItemProcessor- und ItemWriter-Konstruktoren von Spring Batch aufgerufen.
Ich habe Konstruktoren verwendet, um Batch-Daten aus der Datenbank abzurufen, daher erwarte ich, dass die Daten der Datenbank im Speicher verbleiben.
Ich denke, es kann zu Speicherverschwendung führen.
Wie kann ich diese Konstruktoren also nur aufrufen, wenn ich einen Batch-Prozess ausführe?
Hier ist meine Batch-Konfiguration.
@Configuration
@EnableBatchProcessing
public class DbSyncConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
private final int BATCH_SIZE = 1000;
@Bean
public Job dbSyncJob() {
return this.jobBuilderFactory.get("dbSyncJob")
.incrementer(new RunIdIncrementer())
.start(this.userParseStep())
.build();
}
@Bean
public Step userParseStep() {
return this.stepBuilderFactory.get("userParseStep")
.<ParseItem, ParseItem>chunk(BATCH_SIZE)
.reader(new UserItemParseReader())
.writer(new UserItemParseWriter())
.build();
}
}
Lösung
Für diesen Fall können Sie die Federkonfiguration für den Batch initialisieren.
Siehe:
https://www.baeldung.com/spring-lazy-annotation .
https://howtodoinjava.com/spring5/core/spring-bean-eager-vs-lazy-init/
Beantwortet von – swapyonubuntu
Antwort geprüft von – Gilberto Lyons (FixError Admin)