目录
2.12、事务开启
Spring Boot使用的是Spring 事务管理机制,对事务管理提供了一个顶层的接口PlatformTransactionManager,对所支持的所有事务统一管理接口。
实现类 | 说明 |
---|---|
org.springframework.jdbc.datasource.DataSourceTransactionManager | 使用 Spring JDBC 进行持久化数据时使用。 |
org.springframework.orm.hibernate3.HibernateTransactionManager | 使用 Hibernate 3.0 及以上版本进行持久化数据时使用。 |
org.springframework.orm.jpa.JpaTransactionManager | 使用 JPA 进行持久化时使用。 |
org.springframework.jdo.JdoTransactionManager | 当持久化机制是 Jdo 时使用。 |
org.springframework.transaction.jta.JtaTransactionManager | 使用 JTA 来实现事务管理,在一个事务跨越多个不同的资源(即分布式事务)使用该实现 |
不同的是Spring中我们要配置事务管理器,而Spring Boot 为我们提供了默认的事务管理器,当我们使用了 spring-boot-starter-jdbc 的启动器时,框架会自动注入 DataSourceTransactionManager 管理器。只需要在启动类上使用@EnableTransactionManagement注解来开启注解事务,即可不需要任何额外配置就可以用 @Transactional 注解进行事务的使用。但是当我们自己配置了事务管理器的时候,Spring Boot 将不再提供事务管理,而是使用我们定义的事务管理器。
@Transactional默认回滚的是RuntimeException的异常,如果抛出的不是RuntimeException的异常,数据库是不会回滚的。而Spring框架里所有的异常都被 org.springframework 重写为 RuntimeException。
-
导入jdbc的启动器
-
开启注解支持 @EnableTransactionManagement
@SpringBootApplication @MapperScan("com.yu.springbootproject.mapper") @EnableTransactionManagement public class SpringbootprojectApplication { public static void main(String[] args) { SpringApplication.run(SpringbootprojectApplication.class, args); } }
-
在serviceImpl的方法上加注解:@Transactional
事务属性 说明 propagation 指定事务的传播行为。 isolation 指定事务的隔离级别。 readOnly 指定是否为只读事务。 timeout 表示超时时间,单位为“秒”;声明的事务在指定的超时时间后,自动回滚,避免事务长时间不提交会回滚导致的数据库资源的占用。 rollbackFor 指定事务对于那些类型的异常应当回滚,而不提交。 noRollbackFor 指定事务对于那些异常应当继续运行,而不回滚。 value 定义事务管理器 transactionManager 定义事务管理器 @Override @Transactional(rollbackFor = Exception.class) public int insert(User record) { int insert = 0; try { insert = userMapper.insert(record); int i = 5/0; } catch (Exception e) { throw new RuntimeException("产生异常"); } return insert; }
-
测试,添加一条数据
-
把事务注解取消
-
添加事务注解
-