事务管理器
spring中数据库事务是通过PlatformTransactionManager
进行管理的,通过它完成事务的创建、提交和回滚。
spring中约定,事务产生异常时回滚,无异常时会提交事务。
spring中会将事务委托给transactionManager,mybatis中常用的数据库事务管理器是DataSourceTransactionManager
,它继承AbstractPlatformTransactionManager,而后者实现了PlatformTransactionManager。
声明式事务
在spring中可以使用声明式事务和编程式事务,编程式事务几乎已经不再在企业中使用,因为代码可读性差。
声明式事务又可以通过xml配置和注解方式来实现,主流的方法是使用@Transaction
注解声明事务。
使用声明式事务需要配置注解驱动
,加入以下配置就可以使用@Transactional配置事务了。
<tx:annotation-driver transaction-manager="transactionManager"/>
声明式事务底层原理是spring AOP
技术。
数据库事务特性
事务最重要的两个特性:事务的传播级别
和隔离级别
。
-
隔离级别
数据事务隔离级别问题可参考:mysql的事务隔离级别 -
传播行为
springmvc中如何处理事务?
1、首先配置需要依赖的jar包
<!--aop需要依赖的包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--spring事务相关包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.12.RELEASE</version>
</dependency>
2、配置spring处理事务的处理策略
<!-- 配置spring事务管理器,mybatis使用DataSourceTransactionManager,hibernate使用HibernateTransactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="musesfrontdb" />
</bean>
<!-- 启用注解方式定义事务时需要配置 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!--也可以在配置类上加上注解@EnableTransactionManagement-->