7

我正在尝试使用以下方法获取已存储在数据库中 Spring 批处理相关表中的作业执行列表:

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

上述方法调用似乎调用了 JdbcExecutionContextDao 类中的 ExecutionContextRowMapper.mapRow 方法。

ExecutionContextRowMapper 使用 com.thoughtworks.xstream.Xstream.fromXML 方法对 DB 中存储的 JobExecutionContext 的 JSON 字符串进行反序列化。

看起来使用了不正确或默认的 xml 反序列化器来解组 JSONified JobExecutionContext。在这种情况下是否有任何配置可以使用 JSON 反序列化器。

4

1 回答 1

4

ExecutionContext 的序列化器/反序列化器可在 2.2.x 中配置。我们使用ExecutionContextSerializer接口(提供两种实现,一种使用 java 序列化,一种使用您提到的 XStream impl)。要配置您自己的序列化程序,您需要实现org.springframework.batch.core.repository.ExecutionContextSerializer并将其注入JobRepositoryFactoryBean(以便正确序列化/反序列化上下文)和JobExplorerFactoryBean(重新序列化先前保存的上下文)。

需要注意的是,更改序列化方法会阻止 Spring Batch 反序列化之前保存ExecutionContexts的 .

于 2013-10-02T22:19:47.477 回答