读锁定的Spring事务管理

时间:2017-10-23 19:15:58

标签: java database spring transactions spring-transactions

我使用Spring进行交易管理。我正在使用@Transactional在我的应用程序中实现spring事务。我的一个场景是,我的应用程序的两个实例读取特定表的所有记录。在读取和处理记录后,这些记录将被删除。但我的问题是,在一个实例完成读取之前,处理和删除其他实例再次读取这些记录。为了解决这个问题,我计划在事务中使用读锁,这样在第一个事务完成之前,所有记录都会被锁定。如何使用Spring声明性注释实现此功能。任何帮助表示赞赏。我使用DB2作为我的数据库。 感谢。

2 个答案:

答案 0 :(得分:0)

基本上,您希望锁定为更新而读取的行,并在select处跳过锁定的行。在原始SQL中,这将是

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        userNameField.setText("hello world")
    }
通过这种方式,您不会混淆其他事务正在使用的行,并且两者都可以愉快地一次处理100行。隔离级别应为SELECT * FROM FOO FOR UPDATE SKIP LOCKED DATA FETCH FIRST 100 ROWS ONLY; (可能是您正在使用的默认值)。

答案 1 :(得分:0)

您可以使用某种分发机制,每个实例只读取/处理与其他实例不同的特定记录。

例如,
1.在键列上应用mod%2功能
从数据库中读取一组记录后:
Instance-1应该处理密钥%2 = 0的记录并丢弃/不处理其他记录 Instance-2应该处理密钥%2 = 1的记录并丢弃/不处理其他记录
这样,即使两个实例都可以读取相同的记录,我们确信它们只会被一个节点处理。