线程池的事务

AOP

SQLSession

// 获取sqlSession
SqlSession sqlSession = ApplicationContextUtil.getBean(SqlSessionTemplate.class).getSqlSessionFactory().openSession();
// 建立连接
Connection connection = sqlSession.getConnection();
// 自动提交
connection.setAutoCommit(false);
// 从sqlSession中获取需要执行的mapper,这样他们会使用sqlSession这次连接中的事务
sqlSession.getMapper(XxxMapper.class)

线程池

// 子线程中是否有异常标识,使用atomic保本一致性
AtomicBoolean isError = new AtomicBoolean(false);
Future<Object> submit = ThreadPoolTaskExecutor.submit(() -> {
					// 执行状态标识
                    Boolean executorSuccess = Boolean.FALSE;
                    // 都没有出错才可以执行
                    if (!isError.get()){
                    	// SQL执行放回执行是否成功状态
                    }
                    if (!executorSuccess){
                        isError.set(true);
                    }
                    return executorSuccess;
                });

// 等级线程执行结束
objectFuture.get();
在 Java 中,如果需要在调用线程池前提交事务,可以使用 `TransactionSynchronizationManager` 类来实现。具体实现步骤如下: 1. 在需要事务管理的方法上添加 `@Transactional(propagation = Propagation.REQUIRES_NEW)` 注解,设置传播属性为 `Propagation.REQUIRES_NEW`。 2. 在方法体内,通过 `TransactionSynchronizationManager` 开启新的事务,并将事务保存到线程上下文中,如下所示: ```java import org.springframework.transaction.support.TransactionSynchronizationManager; @Transactional(propagation = Propagation.REQUIRES_NEW) public void someMethod() { // 开启新事务 TransactionSynchronizationManager.initSynchronization(); // 业务逻辑 } ``` 在这里,我们使用 `@Transactional` 注解的 `Propagation.REQUIRES_NEW` 属性,表示需要开启新的事务,然后通过 `TransactionSynchronizationManager` 的 `initSynchronization()` 方法开启新事务,并将事务保存到线程上下文中。 在提交事务之后,需要手动清除线程上下文中保存的事务,以避免影响后续的业务逻辑。可以使用 `TransactionSynchronizationManager.clearSynchronization()` 方法来清除事务,如下所示: ```java import org.springframework.transaction.support.TransactionSynchronizationManager; @Transactional(propagation = Propagation.REQUIRES_NEW) public void someMethod() { // 开启新事务 TransactionSynchronizationManager.initSynchronization(); try { // 业务逻辑 } finally { // 提交事务 TransactionSynchronizationManager.getCurrentTransactionSynchronization().flush(); // 清除事务 TransactionSynchronizationManager.clearSynchronization(); } } ``` 在这里,我们使用 `try-finally` 块,确保在提交事务之后,无论业务逻辑是否执行成功,都会清除线程上下文中保存的事务。需要注意的是,在清除事务之前,需要先手动提交事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值