一 Spring的事务机制
所有的数据访问技术都有事务机制,这些技术都提供了API用来开启事务、提交事务来完成数据操作,或者在发生错误的时候回滚数据。
Spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理。Spring的事务机制提供了一个PlatformTransactionManager接口。代码如下:
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
不同的数据访问技术的事务使用不同的接口实现,如下图。
在程序中定义事务管理器的伪代码如下:
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setDataSource(dataSource());
return transactionManager;
}
二 声明式事务
Spring支持声明式事务,即使用注解来选择需要使用事务的方法,它使用@Transactional注解在方法上表明该方法需要事务支持。这是一个基于AOP的实现操作。被注解的方法在被调用时,Spring开启一个新的事务,当方法无异常运行结束后,Spring会提交这个事务。
伪代码如下:
@Transactional
public void savesomething(Long id,String name)
{
//数据库操作
}
在此需要特别注意的是,此@Transactional注解来自org.springframework.transaction.annotation
Spring提供了一个@EnableTransactionManagement注解在配置类上开启声明式的支持。使用了@EnableTransactionManagement后,Spring容器会自动扫描@Transactional的方法和类。
@EnableTransactionManagement的使用方式如下:
@EnableTransactionManagement
public class AppConfig
{
}
三 参考
https://blog.csdn.net/zhangzhihuaniubi/article/details/82455122