我们使用Spring Batch编写我们的作业,并且它工作得很好。但是最近我们看到了一个截断问题,这导致了一些关于spring batch如何存储关于作业的元数据的问题。Spring批处理作业元数据持久性问题
- 每次作业运行时,spring批处理都会将有关作业的元数据存储在数据库中。有两个表:batch_step_execution_context和batch_job_execution_context,它们将元数据保存在short_context和serialized_context两列中。这两列都保存了确切的数据,但short_context的限制为2500个字符,因此数据被截断。
为什么我们2列存储的准确数据,如果我们摆脱short_context什么影响可能它的工作
现在我们使用的内存HSQL数据库为我们的工作。我们的工作之一抛出以下异常:
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 DB,因为它工作正常进行的其他工作,即,它被适当地截断它
感谢
serialized_context不是2500可变长度字符字段,short_context是serialized_context是文本字段 –