Вопрос: Используйте десериализатор JSON для контекста выполнения пакетного задания


Я пытаюсь получить список выполненных заданий, которые были сохранены в связанных с весной таблицах в базе данных, используя:

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

Вышеупомянутый вызов метода вызывает метод ExecutionContextRowMapper.mapRow в классе JdbcExecutionContextDao.

В ExecutionContextRowMapper используется метод com.thoughtworks.xstream.Xstream.fromXML для десериализации строки JSON объекта JobExecutionContext, хранящейся в БД.

Похоже, что неправильный или дешифратор xml-дескриптора используется для развязывания JSONified JobExecutionContext. Есть ли какая-либо конфигурация для использования десериализатора JSON в этом сценарии.


6


источник


Ответы:


Сериализатор / десериализатор для ExecutionContext настраивается в 2.2.x. Мы используем ExecutionContextSerializer интерфейс (обеспечивающий две реализации, один из которых использует сериализацию java и один с использованием XStream impl, который вы упоминаете). Чтобы настроить собственный сериализатор, вам необходимо реализовать org.springframework.batch.core.repository.ExecutionContextSerializer и вводить его в JobRepositoryFactoryBean (чтобы контексты были сериализованы / десериализованы правильно) и JobExplorerFactoryBean (для повторной инициализации ранее сохраненных контекстов).

Важно отметить, что изменение метода сериализации предотвратит десериализацию Spring Batch, ранее сохраненную ExecutionContexts,


3