2013-10-02 3 views
6

Ich versuche, eine Liste der Auftragsausführungen zu erhalten, die im Frühjahr Batch verknüpfte Tabellen in der Datenbank gespeichert wurden, mit:Verwenden JSON Deserializer für Batch-Job-Ausführungskontext

List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance); 

Die obige Methodenaufruf scheint aufrufen ExecutionContextRowMapper.mapRow-Methode in der JdbcExecutionContextDao-Klasse.

Der ExecutionContextRowMapper verwendet die com.thoughtworks.xstream.Xstream.fromXML-Methode, um die in DB gespeicherte JSON-Zeichenfolge von JobExecutionContext zu deserialisieren.

Es sieht so aus, als ob ein falscher oder voreingestellter xml-Deserializer zum Entpacken von JSonified JobExecutionContext verwendet wird. Gibt es eine Konfiguration, um einen JSON Deserializer in diesem Szenario zu verwenden.

Antwort

3

Der Serializer/Deserializer für den ExecutionContext ist in 2.2.x konfigurierbar. Wir verwenden die Schnittstelle ExecutionContextSerializer (mit zwei Implementierungen, eine mit Java-Serialisierung und eine mit der von Ihnen erwähnten XStream-Impl). Um Ihren eigenen Serializer zu konfigurieren, müssen Sie die org.springframework.batch.core.repository.ExecutionContextSerializer implementieren und in die JobRepositoryFactoryBean (damit die Kontexte serialisiert/deserialisiert werden) und die JobExplorerFactoryBean (um die zuvor gespeicherten Kontexte zu reserialisieren) injizieren.

Es ist wichtig zu beachten, dass das Ändern der Serialisierungsmethode verhindert, dass Spring Batch die zuvor gespeicherte ExecutionContexts deserialisiert.

Verwandte Themen