SpringBoot中如何手动开启事务

SpringBoot中如何手动开启事务 这里写自定义目录标题一、使用 TransactionTemplate1、配置 TransactionTemplate2、使用 TransactionTemplate二、使用 PlatformTransactionManager 直接管理事务1、注入 PlatformTransactionManager在Spring Boot中虽然大多数情况下推荐使用Transactional注解来管理事务但有时需要更灵活地手动控制事务。这可以通过TransactionTemplate或PlatformTransactionManager来实现一、使用 TransactionTemplateTransactionTemplate是Spring提供的一个模板类用于简化事务管理。1、配置 TransactionTemplate(首先确保你的项目已经配置了数据源和事务管理器Spring Boot通常会自动配置这些)。import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.support.TransactionTemplate; Configuration public class TransactionConfig { Bean public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) { return new TransactionTemplate(transactionManager); } }2、使用 TransactionTemplate在需要手动管理事务的服务类中注入并使用TransactionTemplateimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; Service public class MyService { Autowired private TransactionTemplate transactionTemplate; public void saveData() { transactionTemplate.execute(new TransactionCallbackWithoutResult() { Override protected void doInTransactionWithoutResult(org.springframework.transaction.TransactionStatus status) { try { // 伪代码 // myRepository.save(new MyEntity(Data 1)); // myRepository.save(new MyEntity(Data 2)); // Simulate an exception to trigger a rollback if (true) { throw new RuntimeException(Simulated exception); } // myRepository.save(new MyEntity(Data 3)); } catch (RuntimeException e) { // Rollback transaction if exception occurs status.setRollbackOnly(); throw e; } } }); } }二、使用 PlatformTransactionManager 直接管理事务PlatformTransactionManager接口提供了更细粒度的事务控制适用于需要复杂事务管理的场景。1、注入 PlatformTransactionManager在需要手动管理事务的服务类中注入PlatformTransactionManagerimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; Service public class MyService { Autowired private PlatformTransactionManager transactionManager; public void performTransactionalOperation() { DefaultTransactionDefinition def new DefaultTransactionDefinition(); def.setName(myTransaction); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status transactionManager.getTransaction(def); try { // Perform database operations here // myRepository.save(new MyEntity(Data 1)); // myRepository.save(new MyEntity(Data 2)); // Simulate an exception to trigger a rollback if (true) { throw new RuntimeException(Simulated exception); } // myRepository.save(new MyEntity(Data 3)); // Commit transaction transactionManager.commit(status); } catch (RuntimeException e) { transactionManager.rollback(status); throw e; } } }