spring-transactions - TransactionSynchronizationManager 和事务回滚的检测
问题描述
我正在添加一些在 Spring 中 TransactionSycnhoniztion 的 beforeCommit() 和 beforeCompletion() 方法中执行的代码。在执行我的代码之前,我需要能够检测到事务处于活动状态并标记为回滚..
public void beforeCompletion() {
if (transaction inactive and not rolledback)
doit();
}
如何检测事务是否处于活动状态且未回滚?我看到方法 isActualTransactionActive() 但看不到访问事务或确定是否回滚的方法。(除非事务回滚时不会调用这些方法)
解决方案
我正在查看 Spring 源代码,AbstractPlatformTransactionManager 有 processCommit() 和 processRollback() 的方法.....
processCommit() 调用 triggerBeforeCommit() 而 processRollback 没有。
所以答案是在发生回滚时不会调用 beforeCommit() ......
在这两种情况下都会调用 beforeCompletion,但会在方法参数中传递状态。
推荐阅读
- python - 我正在开发一个从 python 中的 github webhook 获取有效负载的 web 服务器
- node.js - MongoDb:访问集合和控制台日志对象
- react-native - 似乎无法更改 React-Navigation DrawerNavigation 上的样式(文本颜色)
- javascript - 如何检查 URL 是否具有匹配的结尾作为 json 字符串
- php - WooCommerce 从订单项中获取产品变体属性名称和值
- raspberry-pi - Raspberry PI,无法使用 NTFS 分区硬盘复制、修改或写入 NAS 上的文件
- javascript - 如何解决“参数列表后未捕获的语法错误:缺少)”问题
- sql - 如何将数值表的所有列除以 SQL Server 中的最后一列,除了 ID 列和最后一列作为除数?
- r - replacement has length zero error in R programming of a no claim discount scheme
- azure-devops - 条件 OR 与 Azure Devops Pipeline 中的变量