@transaction使自定义注解失效_Spring 源码分析:不得不重视的 Transaction 事务

业务系统的数据,一般最后都会落入到数据库中,例如 MySQL、Oracle 等主流数据库,不可避免的,在数据更新时,有可能会遇到错误,这时需要将之前的数据更新操作撤回,避免错误数据。

Spring 的声明式事务能帮我们处理回滚操作,让我们不需要去关注数据库底层的事务操作,可以不用在出现异常情况下,在 try / catch / finaly 中手写回滚操作。

Spring 的事务保证程度比行业中其它技术(例如 TCC / 2PC / 3PC 等)稍弱一些,但使用 Spring 事务已经满足大部分场景,所以它的使用和配置规则也是值得学习的。

接下来一起学习 Spring 事务是如何使用以及实现原理吧。

使用例子

1.创建数据库表

65b6ee75c74c3da2cc621c7d1a3f7a8a.png

2.创建对应数据库表的 PO

c25514edb77dbf340e7098f0473e889f.png

3.创建表与实体间的映射

在使用 JdbcTemplate 时很纠结,在 Java 类中写了很多硬编码 SQL,与 MyBatis 使用方法不一样,为了示例简单,使用了 JdbcTemplate,不过还是建议朋友们用 MyBatis,让代码风格整洁。

e1a5217277721ca6b50d1a35d68788c8.png

4.创建数据操作接口

2e972da44065d7d9ee6369c037df3221.png

5.创建数据操作接口实现类

跟书中例子不一样,没有在接口上加入事务注解,而是在公共方法上进行添加,可以在每个方法上自定义传播事件、隔离级别。

f8ea5d2d4ed8c3fe1387ec2b7e62bf7e.png

6.创建配置文件

<?xml version="1.0" encoding="UTF-8"?>

7.添加依赖

记得添加数据库连接和 jdbc、tx 这两个 spring 模块的依赖

optional(project(":spring-jdbc")) // for Quartz supportoptional(project(":spring-tx")) // for Quartz supportcompile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'

8.启动代码

public class TransactionBootstrap { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("transaction/transaction.xml"); UserJdbcTemplate jdbcTemplate = (UserJdbcTemplate) context.getBean("userJdbcTemplate"); System.out.println("--- Records Creation start ----"); JdbcUser user = new JdbcUser(4, "test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值