事务是数据库操作的基本单元,天然具备ACID属性。不过,理论归理论,在Spring Boot项目中如何落地才是关键。下面就从搭建项目开始,完整走一遍基于TransactionTemplate的事务管理流程。
第一步,通过Spring Initializr快速创建一个Spring Boot项目骨架。记得加上lombok依赖,能省去大量样板代码;同时引入spring-boot-starter-jdbc和mysql-connector-ja va,为数据库操作铺好路。
第二步,项目导入Eclipse后,在application.properties里配置MySQL数据源:连接地址、用户名、密码,再加上一些常用参数(比如连接池配置)。配对了,数据库才能连上。
第三步,熟悉Spring Boot连接MySQL的常规操作后,就可以进入编码环节了。
第四步,动手写代码。先做一些基础准备,具体实现细节可以参考下面的图示。
第五步,在启动类上加上@Slf4j注解,日志功能就开了,调试时方便不少。
第六步,创建JdbcTemplate和TransactionTemplate的实例,一个负责数据库操作,一个负责事务管理。配置好之后,它们就是后续的核心工具。
第七步,接下来通过TransactionTemplate管理事务,配合JdbcTemplate执行SQL,就能实现带事务控制的数据库操作逻辑。
第八步,TransactionTemplate的execute方法接受两种回调参数:TransactionCallbackWithoutResult和TransactionCallback。前者用于只执行数据变更、不需要返回结果的操作;后者则允许你在事务中执行逻辑并返回一个结果值,方便后续处理。
第九步,图1展示了一个典型的无返回值事务流程:先在事务外查询当前数据量,然后在事务中插入一条记录并再次查询,最后回滚事务。再次查询会发现数据量恢复原样,说明事务回滚生效了。
第十步,图2则是带返回值的事务:事务开始前查询数据量,事务中插入一条记录后再次查询,最后返回更新后的总量。
第十一步,编写一个测试程序来验证。
第十二步,在启动类中实现CommandLineRunner接口,在run方法里依次调用两个事务操作方法(如图1所示)。观察控制台输出(如图2所示),数据完全符合预期,测试通过,事务处理逻辑正确。