在 Hibernate 中等待事务完成

沃伊泰克

考虑以下(伪 kotlin)代码:

@Transactional
fun updateDatabase(entity: Entity) {
    // do something with entity
}

fun kafkaProduce() {
    updateDatabase(entity) 
    kafka.sendMessage(entity.id)
}

fun kafkaConsume(entityId: Long) {
    em.find(Entity::class, entityId)
}

我们的问题是我们使用READ UNCOMMITTED通常很好的隔离级别当调用kafkaProduce它时,它会kafkaConsume在事务updateDatabase完成之前调用并读取实体的旧状态。有没有办法做某种事情,em.waitForCompletion以便在将消息发送到 Kafka 之前真正完成交易?

沃伊泰克

感谢 AlanHay,我找到了解决方案:

    @Transactional
    public void a transactionalMethod() {
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
            public void afterCommit(){
                //do stuff right after commit
                System.out.println("commit!!!");

            }
        });

        //do db stuff
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章