我什么时候可以相信数据已保存到 mysql?

At what point can I trust that data has been saved to mysql?

创建新对象后 'Order',我想获取其生成的 ID 并将其放入 AMQP 队列中,以便工作人员可以使用它做其他事情。工作人员获取生成的 ID(消息)并查找订单,但抱怨不存在记录,即使我刚刚创建了一个记录。我试图弄清楚在将消息(生成的 ID)放入队列之前调用 .persist() 之后要等待多长时间(我认为这不是一个好主意);让工作人员一遍又一遍地循环,直到 mysql 做 return 一条记录(我也不喜欢);或者找到一个点,在我知道 mysql 中的数据安全后,我可以将消息放入队列(这听起来最好)。我认为它需要在任何 @Transactional 方法之外完成。

将从 mysql 中读回数据的工作人员是不同服务器上不同系统的一部分。那么我什么时候可以告诉工作人员数据在 mysql 中以便它可以开始执行任务?

@Transactional 方法完成后数据是否已写入 mysql 是真的吗,我无法理解这一点。 感谢一百万的预付。

Is it true that after the @Transactional method finishes the data is done being written to mysql, I am having trouble understanding this. Thanks a million in advanced.

因此,首先,正如 Kayamann 和 Ralf 在评论中所写,当事务提交(结束)

时,保证数据被存储并可用于其他进程

@Transactional 方法很容易理解。当你有 @Transactional 方法时,这意味着容器(将实际调用该方法的应用程序)将在调用该方法之前开始事务,并在成功或错误的情况下自动提交或回滚事务。

所以如果我们有

@Transactional
public void modify(){
   doSomething();
}

当你调用代码中的某处时(或通过容器调用,例如由于某些绑定),实际的 frol 将如下所示

tx=entityManager.beginTransaction();
object.modify();
tx.commit();

有很简单的。这种方法将意味着交易 Container Controlled

根据你的情况,为了让你的外部系统知道交易已经完成,你必须使用消息队列(你已经在使用)来显示交易已经完成的消息,并且它可以开始处理东西,或使用不同的技术,例如 REST。

远程系统可以通过队列和 REST 服务向每个事件发送信号,因此没有区别。