我正在使用Spring JDBC和AOP事务处理Java项目。 我有一个场景,我从一个数据库中获取大量数据并将其存储在List>中。对象,然后我将这些数据传递给"写"与另一个数据库创建jdbc连接并逐个写入大数据的方法。编写需要大约10分钟的时间,然后我的代码再次尝试从第一个数据库中获取一些数据,因为它尝试获取数据,第一个数据库的上一个对象已经关闭,因此我得到以下异常:
TransactionInterceptor:542 - 由回滚异常覆盖的应用程序异常
注1:数据库的第一个连接是通过spring bean文件,只有在调用write方法时才会创建第二个连接。
注2:整个过程在一个事务中(仅在第一个数据库上进行事务[我不需要在其他数据库上进行事务处理])
虽然写得很大,但是第一个对象仍然处于空闲状态,因此被删除,当代码再次尝试获取数据时,它会创建不同的连接对象,但我的事务包含已经关闭的第一个连接对象,因此我得到了这个异常。
为了克服这个问题,我想在我的database.config文件中增加时间,但我不确定它是否只是超时问题,如果您认为这是一个超时问题,请建议我在春天jdbc
中增加连接时间的代码我需要你的建议。也许我错了。如果我错了,请纠正我。
答案 0 :(得分:1)
请注意,增加交易超时并不是一个好主意(老实说,几乎从来没有)。因为它只是不正当使用交易的一种解决方法。
交易按其设计应尽可能短。因此,从我的角度来看,建议的解决方案是将整个过程分解为几个步骤,并在不同的事务中执行每个步骤。
BTW:您的错误消息:Application exception overridden by rollback exception
表示Spring无法执行事务回滚。请调查此异常原因。