gpt4 book ai didi

java - Java 8时间包的Spring Batch序列化问题

转载 作者:IT老高 更新时间:2023-10-28 13:50:40 25 4
gpt4 key购买 nike

我有一个 Spring-batch 应用程序,它在 JobExecutionContext 中存储了几个 Java 8 时间对象。我正在为我的 JobRespository 使用默认序列化程序。解析出正在写入 BATCH_STEP_EXECUTION_CONTEXT 表的数据时,我遇到了异常。我有一个 LocalDateTime 存储为:

{
"@resolves-to": "java.time.Ser",
"byte": [5,
8,
18,
8,
45,
50],
"int": [2015,
10000000]
}

当我尝试读取之前的 JobExecution 数据时,这会导致异常:

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

我正在使用 Spring-batch 3.0.5.RELEASE。我也尝试升级到最新版本的 xstream (1.4.8) 和 Jettison (1.3.7),但我得到了同样的异常(exception)。

这似乎是 XStream (link) 的一个已知问题。建议是在 XStream 中注册一个自定义转换器。但是,spring-batch 不会公开实际的 XStream 对象以注册转换器。有关如何进行的任何建议?

最佳答案

Spring Batch 允许您为 ExecutionContext 配置自己的序列化程序通过实现 ExecutionContextSerializer接口(interface)并将其注入(inject)JobRepositoryFactoryBean .

您是正确的,因为我们目前不允许您注入(inject)自己的 XStream 实例(尽管考虑到这个问题,这似乎是一个合理的扩展点)。现在,您必须扩展或复制 XStreamExecutionContextStringSerializer并使用您自己的 XStream 实例。

关于java - Java 8时间包的Spring Batch序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com