SpringBoot开启事务

旧城等待, 2024-03-25 23:19 211阅读 0赞

Java知识点总结:想看的可以从这里进入

目录

      • 2.12、事务开启

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

    1. @SpringBootApplication
    2. @MapperScan("com.yu.springbootproject.mapper")
    3. @EnableTransactionManagement
    4. public class SpringbootprojectApplication {
  1. public static void main(String[] args) {
  2. SpringApplication.run(SpringbootprojectApplication.class, args);
  3. }
  4. }
  • 在serviceImpl的方法上加注解:@Transactional










































    事务属性 说明
    propagation 指定事务的传播行为。
    isolation 指定事务的隔离级别。
    readOnly 指定是否为只读事务。
    timeout 表示超时时间,单位为“秒”;声明的事务在指定的超时时间后,自动回滚,避免事务长时间不提交会回滚导致的数据库资源的占用。
    rollbackFor 指定事务对于那些类型的异常应当回滚,而不提交。
    noRollbackFor 指定事务对于那些异常应当继续运行,而不回滚。
    value 定义事务管理器
    transactionManager 定义事务管理器
    1. @Override
    2. @Transactional(rollbackFor = Exception.class)
    3. public int insert(User record) {
  1. int insert = 0;
  2. try {
  3. insert = userMapper.insert(record);
  4. int i = 5/0;
  5. } catch (Exception e) {
  6. throw new RuntimeException("产生异常");
  7. }
  8. return insert;
  9. }
  • 测试,添加一条数据

    • 把事务注解取消

      image-20220923182202616

    • 添加事务注解

      image-20220923182347848

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot开启事务

    @Transactional 直接在想要启动事务的方法或者类上添加@Transactional注解即可,在类上添加注解,默认类下的所有方法都会使用事务。 在类上添加注解