2013-10-02 5 views
6

Sto cercando di ottenere un elenco di esecuzioni di posti di lavoro che sono state memorizzate in tabelle relativi primavera lotti nel database utilizzando:Usa JSON deserializzatore per il contesto di esecuzione del lavoro batch

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

La chiamata di metodo di cui sopra sembra invocare Metodo ExecutionContextRowMapper.mapRow in classe JdbcExecutionContextDao.

ExecutionContextRowMapper utilizza il metodo com.thoughtworks.xstream.Xstream.fromXML per deserializzare la stringa JSON di JobExecutionContext memorizzata nel DB.

Sembra che un deserializzatore xml errato o predefinito venga utilizzato per annullare l'esecuzione di JSONified JobExecutionContext. Esiste una configurazione per utilizzare un deserializzatore JSON in questo scenario.

risposta

3

Il serializzatore/deserializzatore per ExecutionContext è configurabile in 2.2.x. Utilizziamo l'interfaccia ExecutionContextSerializer (che fornisce due implementazioni, una che utilizza la serializzazione java e una che usa l'impl XStream che hai menzionato). Per configurare il proprio serializzatore, è necessario implementare lo org.springframework.batch.core.repository.ExecutionContextSerializer e iniettarlo nello JobRepositoryFactoryBean (in modo che i contesti siano serializzati/deserializzati correttamente) e lo JobExplorerFactoryBean (per riserializzare i contesti precedentemente salvati).

È importante notare che la modifica del metodo di serializzazione impedirà a Spring Batch di deserializzare salvato in precedenza ExecutionContexts.

Problemi correlati