Spring事务执行前后编程实现自定义同步操作

本文探讨了Spring的PlatformTransactionManager接口及其抽象实现AbstractPlatformTransactionManager,讲解了如何在事务提交前后进行自定义操作。通过TransactionSynchronizationUtils的触发方法,可以在事务执行的各个阶段插入前置、后置和结束操作。TransactionSynchronizationManager则提供了注册和查询事务同步操作的功能,使得编程式和声明式事务都能支持此类扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PlatformTransactionManager

PlatformTransactionManager接口提供commit提交事务功能

public interface PlatformTransactionManager extends TransactionManager {
	
	TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
			throws TransactionException;


	void commit(TransactionStatus status) throws TransactionException;

	
	void rollback(TransactionStatus status) throws TransactionException;

}

AbstractPlatformTransactionManager

AbstractPlatformTransactionManager继承PlatformTransactionManager接口实现commit功能;

commit中调用processCommit方法;

processCommit方法提供事务执行前置(triggerBeforeCommit)、后置(triggerAfterCommit)、结束(triggerAfterCompletion)等操作,在这些操作中调用TransactionSynchronizationUtils的前置(triggerBeforeCommit)、后置(triggerAfterCommit)、结束(triggerAfterCompletion)等操作;

public abstract class AbstractPlatformTransactionManager implements PlatformTransactionManager, Serializable {
 
	@Override
	public final void commit(TransactionStatus status) throws TransactionException {
		// 省略部分代码

		processCommit(defStatus);
	}

	
	private void processCommit(DefaultTransactionStatus status) throws TransactionException {
		try {
			boolean beforeCompletionInvoked = false;

			try {
				boolean unexpectedRollback = false;
				prepareForCommit(status);
				triggerBeforeCommit(status);
				triggerBeforeCompletion(status);
				beforeCompletionInvoked = true;

				// 省略部分代码
			}
			catch (UnexpectedRollbackException ex) {
				// can only be caused by doCommit
				triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK);
				throw ex;
			}
			catch (TransactionException ex) {
				// can only be caused by doCommit
				if (isRollbackOnCommitFailure()) {
					doRollbackOnCommitException(status, ex);
				}
				else {
					triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN);
				}
				throw ex;
			}
			catch (RuntimeException | Error ex) {
				if (!beforeCompletionInvoked) {
					triggerBeforeCompletion
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值