springboot 事务使用示例


springboot 事务使用示例

       

                      

                                    

使用示例

      

                             

         

*********

配置文件

     

application.yml

spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3307/lihu?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

mybatis-plus:
  mapper-locations: classpath:/mappers/*.xml
  type-aliases-package: com.example.demo.pojo

logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug

      

*********

pojo 层

         

Person

@Getter
@Setter
@ApiModel(value = "Person对象", description = "")
public class Person extends Model<Person> {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String name;

    private Integer age;


    @Override
    public Serializable pkVal() {
        return this.id;
    }

}

         

*********

config 层

     

DataConfig

@Configuration
@MapperScan("com.example.demo.dao")
public class DataConfig {

    @Bean
    public MybatisPlusInterceptor initMybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);

        OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor =new OptimisticLockerInnerInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(optimisticLockerInnerInterceptor);

        return mybatisPlusInterceptor;
    }
}

       

*********

service 层

          

PersonService

public interface PersonService extends IService<Person> {

    void savePerson(Person person);
}

         

*********

service.impl 层

         

PersonServiceImpl

@Service
public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person> implements PersonService {

    @Resource
    private PersonMapper personMapper;

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void savePerson(Person person) {
        personMapper.insert(person);

        if (person.getAge().equals(16)){
            throw new RuntimeException("id为"+16+"的数据插入失败");
        }
    }
}

                      

*********

controller 层

        

PersonController

@RestController
@RequestMapping("/person")
public class PersonController {

    @Resource
    private PersonService personService;

    @RequestMapping("/hello")
    public String hello(){
        for (int i=0;i<10;i++){
            Person person = new Person();
            person.setName("瓜田李下 "+i);
            person.setAge(10+i);

            try {
                personService.savePerson(person);
            }catch (Exception e){
                System.out.println(e.getMessage());
            }
        }

        return "hello";
    }
}

           

           

                                    

使用测试

          

localhost:8080/hello,控制台输出:

# 事务1提交
# 创建事务
2022-04-29 12:04:10.371 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT

# 获取数据库连接
2022-04-29 12:04:10.582 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction

# 切换事务到手动提交
2022-04-29 12:04:10.585 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit

# 初始化事务提交
2022-04-29 12:04:10.665 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit

# 提交事务
2022-04-29 12:04:10.665 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]

# 释放事务
2022-04-29 12:04:10.674 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务2提交
2022-04-29 12:04:10.674 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.674 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.674 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.680 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.680 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.685 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务3提交
2022-04-29 12:04:10.685 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.685 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.685 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.691 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.691 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.695 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务4提交
2022-04-29 12:04:10.696 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.696 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.696 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.701 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.701 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.706 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务5提交
2022-04-29 12:04:10.706 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.706 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.707 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.713 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.713 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.718 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务6提交
2022-04-29 12:04:10.718 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.718 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.718 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.725 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.725 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.730 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务7回滚
# 创建事务
2022-04-29 12:04:10.731 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT

# 获取数据库连接
2022-04-29 12:04:10.731 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction

# 切换事务到手动提交
2022-04-29 12:04:10.731 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit

# 初始化事务回滚
2022-04-29 12:04:10.737 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction rollback

# 事务回滚
2022-04-29 12:04:10.737 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Rolling back JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]

# 释放事务
2022-04-29 12:04:10.742 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction
id为16的数据插入失败


# 事务8提交
2022-04-29 12:04:10.743 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.743 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.743 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.748 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.749 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.754 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务9提交
2022-04-29 12:04:10.754 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.754 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.754 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.759 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.760 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.765 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction


# 事务10提交
2022-04-29 12:04:10.765 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Creating new transaction with name [com.example.demo.service.impl.PersonServiceImpl.savePerson]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
2022-04-29 12:04:10.765 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] for JDBC transaction
2022-04-29 12:04:10.765 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] to manual commit
2022-04-29 12:04:10.771 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction commit
2022-04-29 12:04:10.771 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Committing JDBC transaction on Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc]
2022-04-29 12:04:10.776 DEBUG 2726 --- [nio-8080-exec-1] o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a79abcc] after transaction

       

            

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值