我们使用Spring Batch来编写我们的工作,它的工作非常好。但是最近我们看到了截断的问题,导致关于spring批量存储关于作业的元数据的一些问题。
为什么我们有2列用于存储确切数据,如果我们摆脱short_context对作业有什么影响
现在我们在内存中使用HSQL db作为我们的工作。我们的一项工作提出了以下例外:
org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL [UPDATE BATCH_JOB_EXECUTION_CONTEXT SET SHORT_CONTEXT =?,SERIALIZED_CONTEXT =? WHERE JOB_EXECUTION_ID =?];数据异常:字符串数据,右截断;嵌套异常是java.sql.SQLDataException:数据异常:字符串数据,右截断
更多堆栈跟踪:
Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.types.CharacterType.castOrConvertToType(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.types.CharacterType.convertToType(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.StatementDML.getUpdatedData(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.StatementDML.executeUpdateStatement(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.StatementDML.getResult(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.StatementDMQL.execute(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.Session.executeCompiledStatement(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
at org.hsqldb.Session.execute(Unknown Source) ~[hsqldb-2.3.3.jar!/:2.3.3]
这是否特定于HSQL数据库,因为它适用于其他作业,即正确截断它
感谢
答案 0 :(得分:0)
serialized_context
列应该是CLOB
(或HSQLDB中的LONGVARCHAR
),而不是2500可变长度字符字段。检查DDL here。如果更改HSQLDB数据库中的数据类型,则不应该看到任何截断。
除此之外,我会提醒您在执行环境中序列化过多,因为它会严重影响性能。你存的那么大的东西是什么?