Spring声明式事务
spring声明式事务管理顶层接口:
public interface PlatformTransactionManager {
/**
* 获取事务状态信息
*/
TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;
/**
* 提交事务
*/
void commit(TransactionStatus status) throws TransactionException;
/**
* 回滚事务
*/
void rollback(TransactionStatus status) throws TransactionException;
}
作用:
此接口是Spring的事务管理器核心接口。Spring本身并不支持事务实现,只是负责提供标准,应用底层支持什么样的事务,需要提供具体实现类。此处也是策略模式的具体应用。在Spring框架中,也为我们 内置了一些具体策略,例如:DataSourceTransactionManager
,HibernateTransactionManager
等。(HibernateTransactionManager事务管理器在 spring-orm-5.1.12.RELEASE.jar中)
纯XML方式配置
- 导入依赖
<!--引入spring声明式事务相关--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.1.12.RELEASE</version> </dependency>
- XML配置
<!--spring声明式事务配置,声明式事务就是配置一个aop--> <!--横切逻辑--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg name="dataSource" ref="dataSource"></constructor-arg> </bean> <!--配置事务增强--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!--定制事务细节,传播行为、隔离级别等--> <tx:attributes> <!-- 一般性配置 这里建议项目中约定好前缀,根据前缀配置 read-only:是否只读事务 propagation:事务传播行为 isolation:事务隔离级别,DEFAULT:使用数据库配置的隔离级别 timeout:事务超时,-1不设置 rollback-for:指定遇到哪些异常回滚,默认是RuntimeException --> <tx:method name="*" read-only="false" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" rollback-for