Ich versuche, eine CSV aus den Ergebnissen einer Hibernate-Abfrage zu generieren, es könnte bis zu 200.000 Zeilen enthalten, und wenn erstellt, könnte die CSV etwa 30 MB sein.CSV aus einer Liste von Objekten generieren
Ich kämpfe um die Leistung alles in der Nähe akzeptabel. Momentan gibt meine Hibernate-Abfrage eine Liste von Objekten zurück. Ich verwende dann einen StringBuilder, um eine CSV-Zeichenfolge zu generieren. Dann bekomme ich ein Byte-Array von diesem, und übergeben Sie das Byte-Array in response.outputstream.write() -Methode.
Was soll ich tun, um eine CSV dieser Größe effizient zu generieren?
Mein Service
List<Object> objectList = hibernateDao.getObjectList(objectList);
StringBuilder sb = new StringBuilder();
sb.append("field1_id,field2,field3,field14");
for(Object object : objectList){
sb.append("\n");
sb.append(object.field1());
sb.append(",");
sb.append(object.field2());
sb.append(",");
sb.append(object.field3());
...
...
sb.append(",");
sb.append(object.field14);
}
byte[] bytes = sb.toString().getBytes();
return bytes;
My-Controller werden die resultierenden Bytes erhalten []
response.setHeader("Content-Type", "text/comma-separated-values");
response.getOutputStream().write(objectService.getListByteArray());
Nutzung durch den ganzen Weg Streaming. Erstellen Sie keine große Datei im Speicher und streamen Sie sie. streamen Sie es direkt von der Datenbank zu Ihrer Antwort. super csv ist ziemlich schnell –