Ich habe eine Spring-Batch-Anwendung, die mehrere Java 8 Zeitobjekte im JobExecutionContext speichert. Ich verwende den Standard-Serializer für mein JobRespository. Ich stehe vor Ausnahmen, wenn die Daten analysiert werden, die in die Tabelle BATCH_STEP_EXECUTION_CONTEXT geschrieben werden. Ich habe eine Local, die als gespeichert wird:Spring Batch-Serialisierungsprobleme mit Java 8-Zeitpaket
{
"@resolves-to": "java.time.Ser",
"byte": [5,
8,
18,
8,
45,
50],
"int": [2015,
10000000]
}
Dies entspricht eine Ausnahme führt, wenn ich versuche, aus den vorherigen JobExecution Daten zu lesen:
Caused by: java.lang.ClassCastException: java.lang.Byte cannot be cast to java.lang.Integer
at com.thoughtworks.xstream.core.util.CustomObjectInputStream.readInt(CustomObjectInputStream.java:144) ~[xstream-1.4.8.jar:1.4.8]
at java.time.LocalDate.readExternal(LocalDate.java:2070) ~[na:1.8.0_45]
at java.time.LocalDateTime.readExternal(LocalDateTime.java:2002) ~[na:1.8.0_45]
at java.time.Ser.readInternal(Ser.java:259) ~[na:1.8.0_45]
at java.time.Ser.readExternal(Ser.java:246) ~[na:1.8.0_45]
at com.thoughtworks.xstream.converters.reflection.ExternalizableConverter.unmarshal(ExternalizableConverter.java:167) ~[xstream-1.4.8.jar:1.4.8]
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ~[xstream-1.4.8.jar:na]
... 97 common frames omitted
I Frühlings-Batch 3.0.5 verwenden. FREISETZUNG. Ich habe auch versucht, auf die neuesten Versionen von Xstream (1.4.8) und Jettison (1.3.7) zu aktualisieren, aber ich bekomme die gleiche Ausnahme.
Dies scheint ein bekanntes Problem mit XStream (link). Der Vorschlag war, einen benutzerdefinierten Konverter in XStream zu registrieren. Spring-Batch stellt das tatsächliche XStream-Objekt jedoch nicht bereit, um einen Konverter zu registrieren. Irgendwelche Vorschläge zum weiteren Vorgehen?
haben Sie @EnableBatchProcessing-Annotation in einer Konfigurationsklasse hinzugefügt? –