【发布时间】:2021-02-06 17:51:15
【问题描述】:
我在我的存储库方法上使用 PESSEMSTIC_WRITE 锁。这就是锁定我的对象直到交易结束。但是,我遇到了一个问题,在一个端点内,控制器-> 服务-> 我开始事务然后我需要更新我的对象并将消息发送到 kafka,之后我需要在此方法中再次更新我的对象并发送到 kafka .因此,因为它是一个事务,所以更改仅在缓存中本地起作用。但是我需要保存在数据库中然后发送到 kafka,然后再次更改我的对象并保存到数据库并发送到 kafka 消息,我不能使用 REQUIRES_NEW 并以任何方式创建新事务,因为我的对象被锁定。那么我该如何处理呢? 这个锁在我的项目的许多部分中用于修复并行事务。
【问题讨论】:
-
我对您要解决的实际问题感到困惑。你是什么意思'我需要保存在数据库中然后发送到kafka'?当您的对象被写锁锁定时,没有其他人可以读取相应的行,此时您是否保存到数据库有什么关系?在锁被释放之前,这些更改将不可见
-
好吧,但是我需要这个杀手在锁定对象上保存两次,我认为业务有问题。
标签: postgresql jpa spring-data-jpa transactions locking