ich ein Neuling bin Charge zu springen, würde Ich mag den perfekten Ansatz finden, mit dem Anwendungsfall zu verwenden, wie hier gezeigt:best practice speichern Dateien auf der Karte mit Feder Batch
ich mehr CSV-Dateien, die ich möchte sie auf Memory (als Collection Store .. dh List Map) speichern, dann würde ich gerne auf sie bei den nächsten Schritten/Jobs für meine Logik Geschäft/beziehen.
Nehmen wir ein Beispiel für ein Objekt XX, das in Map mit einem ItemWriter gespeichert ist.
Objekt XX Modell
public class Object {
private int x;
private int y;
// getters setters
}
die itemReader für Objekt X
public class ObjectItemReader extends FlatFileItemReader<Object> {
public ObjectItemReader() {
this.setResource(new ClassPathResource("xxx.csv"));
this.setLineMapper(new DefaultLineMapper<Object>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] { "x", "y" });
setDelimiter(DELIMITER_TAB);
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Object>() {{
setTargetType(Object.class);
}});
}});
}
}
die ObjectWriter
public class ObjectItemWriter implements ItemWriter<Object> {
private Map<Long , Object> objectMap;
public ObjectItemWriter() {
System.out.println("Map Store is created ");
objectMap= new HashMap<Long , Object>();
}
@Override
public void write(List<? extends Object> items) throws Exception {
for (Object depot : items) {
objectMap.put(depot.getX(), depot);
}
}
public Map<Long , Object> getobjectMap() {
return objectMap;
}
}
wie Sie alle Datensätze in der Karte mit dem itemWriter gespeichert sind, sehen kann, i machte einen Test mit einem einfachen Tasklet, um auf diese Karte in anderen Schritten zuzugreifen
public class TaskletStep implements Tasklet{
@Autowired
private ObjectItemWriter objectItemWriter;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println(objectItemWriter.getobjectMap().size());
return null;
}
}
Meine Fragen,
gibt es eine andere Art und Weise/bester Weg, um alle CSV-Dateien auf Speicher zu speichern, mit nur ItemReader oder ItemProcessor verwenden, da es ein einfachen Abrufen von Daten aus Dateien sind auf der Karte anzeigen?
Ist der itemWriter ein wesentlicher Schritt, um diese auf der Karte abgelegt zu speichern?
Zuerst danke für Ihre freundliche Hilfe, ich finde Ihre Antwort sehr interessant. nach Ihrer Frage, welche spezifischen Probleme Sie konfrontiert, indem Sie Karte in Writer füllen: in der Tat ist es ein Design mater, weil ich andere ItemWriter in dem gleichen Paket verwendet, um Datum als aussetzen auf CSV-Dateien zu füllen. daher möchte ich nicht, dass sie mit dem von mir verwendeten Element verwechselt werden, das ich verwendet habe, um Elemente in Map zu füllen, da sie eigentlich nicht so schreiben, wie sie im Speicher ablegen. –
ywc ... Schreiben sollte nicht verwechselt werden, wenn es im Speicher schreibt oder dauerhaft schreibt ... Schreiben bedeutet, dass das gelesene Element verarbeitet und bereit ist, gespeichert zu werden. Wenn Sie API-integrierte Writer verwenden, werden Sie es schwierig finden, sie im Reader zu speichern, da Sie nicht selbst die Methode 'read()' aufrufen. –