EasyTransaction icon indicating copy to clipboard operation
EasyTransaction copied to clipboard

是不是在调用了transaction.execute 方法后还要再开启一个本地事务,才会开始分布式事务的流程

Open OKill opened this issue 7 years ago • 4 comments

你好,我看了你的源码,发现 Future<WalletPayResponseVO> deductFuture 做了延迟执行,是不是在调用了transaction.execute 方法后还要再开启一个本地事务,才会开始分布式事务的流程?

OKill avatar Jan 29 '19 06:01 OKill

不是,调用transaction.startTransaction或者transaction.execute时ET就开始介入,开启了一个分布式事务

skyesx avatar Jan 29 '19 09:01 skyesx

调用transaction.startTransaction或者transaction.execute时,要求Spring管控的事务要开启

skyesx avatar Jan 29 '19 09:01 skyesx

那是不是必须先调用 saveOrderRecord(jdbcTemplate,userId,money); 后面再调用transaction.execute 分布式事务才有效果?是不是只能让spring自动提交,不能手动提交后再开启另一个事务?

OKill avatar Jan 30 '19 09:01 OKill

  • 那是不是必须先调用 saveOrderRecord(jdbcTemplate,userId,money); 后面再调用transaction.execute 分布式事务才有效果?

    只要求开启了由spring的PlatformTransactionManager管理下的事务即可。 无需先调用saveOrderRecord,Spring事务的开启在进入业务方法前,已经由切面开启,这个是spring的机制。

  • 是不是只能让spring自动提交,不能手动提交后再开启另一个事务?

    看你的手动提交是个什么概念,如果你调用的是jdbc的connection的commit的话,则不能。如果你调用的是PlatformTransactionManager下的commit的话,则可以手动提交

skyesx avatar Jan 30 '19 10:01 skyesx