Redis与 DataSource 事务封装

该博客探讨了如何在Spring框架下实现Redis与DataSource的事务管理,通过`RedisDataSoureceTransaction`类进行封装,确保数据的一致性。在开始事务时,同时开启数据库和Redis的事务,并提供提交和回滚方法来控制事务。文章还强调了在事务回滚时,数据库和Redis事务会同时回滚,以保证数据的同步。
摘要由CSDN通过智能技术生成

Redis与 DataSource 事务封装

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;

import com.mayikt.core.utils.RedisUtil;

@Component
@Scope(ConfigurableListableBeanFactory.SCOPE_PROTOTYPE)
public class RedisDataSoureceTransaction {
@Autowired
private RedisUtil redisUtil;
/**
* 数据源事务管理器
*/
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;

/**
 * 开始事务 采用默认传播行为
 * 
 * @return
 */
public TransactionStatus begin() {
	// 手动begin数据库事务
	// 1.开启数据库的事务 事务传播行为
	TransactionStatus transaction = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
	// 2.开启redis事务
	redisUtil.begin();
	return transaction;
}

/**
 * 提交事务
 * 
 * @param transactionStatus
 *            事务传播行为
 * @throws Exception
 */
public void commit(TransactionStatus transactionStatus) throws Exception {
	if (transactionStatus == null) {
		throw new Exception("transactionStatus is null");
	}
	// 支持Redis与数据库事务同时提交
	dataSourceTransactionManager.commit(transactionStatus);
}

/**
 * 回滚事务
 * 
 * @param transactionStatus
 * @throws Exception
 */
public void rollback(TransactionStatus transactionStatus) throws Exception {
	if (transactionStatus == null) {
		throw new Exception("transactionStatus is null");
	}
	// 1.回滚数据库事务 redis事务和数据库的事务同时回滚
	dataSourceTransactionManager.rollback(transactionStatus);
	// // 2.回滚redis事务
	// redisUtil.discard();
}
// 如果redis的值与数据库的值保持不一致话

}

使用:

TransactionStatus transactionStatus =redisDataSoureceTransaction.begin();
redisDataSoureceTransaction.commit(transactionStatus);
redisDataSoureceTransaction.rollback(transactionStatus);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

研程序笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值