在代码里事务提交后方法结束,此时数据库是否已经执行了事务?因为事务提交返回了成功说明数据库已经处理了这个事务提交,但是此时数据库实际是否已经有执行完成这个事务?还是代码里事务提交完成后数据库实际并没有执行完成,只是先返回了成功的信息?现在碰到一个情况是方法提交结束后另外一个程序立刻调用存储过程查询数据会出现查不到的情况。
一般数据库在事务提交后会将数据落盘以持久化。但对于读写分离的集群环境,节点之间的数据同步是存在延迟的。执行写操作的节点和读操作的节点不是同一个的时候,写操作刚提交,立即执行读操作,可能并不能获取最新数据。
在大多数数据库管理系统中,当事务提交(commit)操作返回成功时,这通常意味着数据库已经完成了对该事务中所有操作的持久化,即将事务中的更改永久地保存到数据库中。这意味着,从数据库的角度来看,这些更改已经生效,并且对其他事务(包括后续的查询)是可见的。
然而,你提到的“方法提交结束后另外一个程序立刻调用存储过程查询数据会出现查不到的情况”可能由以下几个原因造成:
针对你提到的情况,建议检查以下几点:
总之,当事务提交返回成功时,从数据库的角度看,该事务中的更改应该已经生效并对其他事务可见。如果出现数据不可见的情况,通常是由于上述某种原因导致的。
我的路线如下 我知道(A)处的JMS消费者将在每次轮询时分叉JMS事务,并附加到线程。(B)中的事务处理节点也将在交换到达那里并连接到线程后分叉JPA事务。 请在下面找到我的问题: > < li >能否将两个不同的事务附加到一个线程上(如上所示)? < li >如果是,哪一个应该被停职? < li> 上述路由的提交和回滚顺序应该是什么? 注:我没有从骆驼在行动第二版中找到任何明显的答案,所以请指导
我创建了一个示例--SPRING,JPA(EclipseLink持久性提供程序)和JTA事务管理器(JBoss7)。我观察到数据库中的所有数据都正确地显示在UI中以进行读操作。但是当涉及保存/更新或删除操作时,服务层不将工作提交到数据库。没有捕获到异常(我也检查了控制台/日志,并且调试了代码,可以看到EntityManager.persist/remove被调用,没有任何异常)。 > module
我们使用HiberNate作为JPA提供程序。当其中一个实体更新时,我需要对Quartz计划执行一些更新。目前,该代码是在该实体的更新方法中调用的。但是,Quartz更改只有在事务成功提交时才会生效。 我考虑过实现一个实体监听器,但是我只想在实体被特定方法修改时执行这些更新,并且我不确定JPA实体监听器是否支持依赖注入,我需要依赖注入来获取对Quartz调度器的引用。 有没有办法以编程方式附加活动
我们正试图在spring Kafka消费者中实现事务管理。 我们有Kafka消费者在收听主题A的信息- 我面临的问题是,当数据库事务提交失败时,主题B上的发送操作不会回滚。因此,系统处于不一致状态。 其他场景按预期工作。 例如: > 从kafka读取msg- 阅读Kafka的消息- PS:我知道kafka不支持XA事务。我确实看到一些参考资料提到了ChainedTransactionManager
持久性提供程序只需要在Java EE容器环境中支持CDI注入实体侦听器。如果未启用CDI,则持久性提供程序不得调用依赖于CDI注入的实体侦听器。 当从Java EE环境中调用时,实体的回调侦听器共享调用组件的企业命名上下文,并且在调用回调方法时在调用组件的事务和安全上下文中调用实体回调方法。 例如,如果事务提交是事务属性为的会话bean业务方法正常终止的结果,则和回调将在该组件的命名上下文、事务上
1、Db.tx 事务 在 Db 工具类里面,提供了一个系列的 tx(...) 方法支持数据库事务,以下是 Java 8 的 lambda 语法使用示例: Db.tx(() -> { Db.update("update t1 set f1 = ?", 123); Db.update("update t2 set f2 = ?", 456); return true; }); 以上代码中的