繁体   English   中英

如何在春季以编程方式设置事务的回滚点?

[英]How can I programatically set the roll back point for a transaction in spring?

如何在Spring中指定事务的回滚点?

假设出现以下情况,我必须在数据库中执行很长的插入操作,这需要花费很多时间(几分钟)。 此插入操作被包装在事务中,该事务可确保在发生问题时中止事务,并将数据库还原到事务开始之前的状态。

但是,此解决方案影响应用程序的性能,因为在执行长事务时其他事务无法访问该数据库。 我通过将大型事务拆分为几个执行相同操作的较小事务来解决了此问题。 但是,如果这些小事务之一失败,则数据库将回滚到该最后一个事务之前的状态。 不幸的是,这会使数据库处于错误状态。 我希望如果这些较小的事务中的任何一个发生错误,则数据库会回滚到第一个小事务之前的状态(即,完全相同的状态,如果此操作由单个事务执行,它将回滚)。

您对我如何使用Spring交易实现这一点有什么建议吗?

您应该查看http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api/org/springframework/transaction/TransactionStatus.html 它具有所需的功能:-创建保存点-释放保存点-回滚到保存点

当然,您的事务管理器(以及基础的JDBC驱动程序和数据库)应支持该功能。

如果可以对登台表和生产表使用相同的主键序列,则应将数据从stg批量转移到prod。 当小事务失败时,可以使用登台表中的键从生产表中删除。 这样您就可以将生产表恢复到原始状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM