微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring事物的传播特性详解

这篇文章主要介绍了Spring事物的传播性详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下

目录

一、事务的传播性

二、测试前准备

2.1、准备好数据库

2.2、初始化spring项目

2.3、数据库连接信息配置

2.4、Service、Dao

2.5、测试类

2.6、说明

三、使用其他传播性

3.1、REQUIRES_NEW

3.2、MANDATORY

3.3、SUPPORTS

3.4、NOT_SUPPORTED

3.5、NEVER

3.6、nesTED

一、事务的传播性

研究的是多个事务存在时的处理策略

1)required:如果存在一个事务,则支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

2)SUPPORTS:如果存在一个事务,支持当前事务,如果当前没有事务,就以非事务方式执行。

3)MANDATORY:如果存在一个事务,支持当前事务,如果当前没有事务,就抛出异常。

4)REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

5)NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6)NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

7)nesTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。

二、测试前准备

2.1、准备好数据库

数据库transaction_propagation

账号表account、书本表book、库存表book_stock

SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for account -- ---------------------------- DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) CHaraCTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `balance` double(11, 2) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHaraCTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic STORAGE MEMORY; -- ---------------------------- -- Records of account -- ---------------------------- INSERT INTO `account` VALUES (1, 'Albert', 100.00); -- ---------------------------- -- Table structure for book -- ---------------------------- DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `book_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHaraCTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `price` double(11, 2) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`book_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1003 CHaraCTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of book -- ---------------------------- INSERT INTO `book` VALUES (1001, '基础数据结构', 60.00); INSERT INTO `book` VALUES (1002, '数据库设计', 50.00); -- ---------------------------- -- Table structure for book_stock -- ---------------------------- DROP TABLE IF EXISTS `book_stock`; CREATE TABLE `book_stock` ( `book_id` int(11) NOT NULL AUTO_INCREMENT, `stock` int(11) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`book_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1003 CHaraCTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of book_stock -- ---------------------------- INSERT INTO `book_stock` VALUES (1001, 100); INSERT INTO `book_stock` VALUES (1002, 100); SET FOREIGN_KEY_CHECKS = 1;

2.2、初始化spring项目

导入一些基本依赖包:jdbc、MysqL驱动包、测试模块;

org.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boot-starter-webMysqLmysql-connector-javaorg.springframework.bootspring-boot-starter-testtest

2.3、数据库连接信息配置

#jdbc spring: datasource: driver-class-name: com.MysqL.cj.jdbc.Driver url: jdbc:MysqL://localhost/transaction_propagation?useUnicode=true&characterEncoding=utf-8 username: root password: 123456

2.4、Service、Dao

这里只使用测试调用,省略controller以及entity等层构;

1、首先Dao类,编写一个购买的简单操作:查询单价、更新库存、更新账户余额;

@Repository public class BookShopDao { @Autowired private JdbcTemplate jdbcTemplate = new JdbcTemplate(); public double getPriceById(Integer bookId) { String sql = "SELECT price FROM BOOK WHERE book_id = ?"; double price = jdbcTemplate.query(sql, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement preparedState上一篇:深入了解JAVA 软引用下一篇:Java中io流解析及代码实例 热门搜索

事物传播 

传播特性 

人物特性 

事务传播 

传播事件 

相关文章

Spring事物的传播特性详解

2021-09-10阅读(5620)评论(0)推荐()

这篇文章主要介绍了Spring事物的传播性详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下

Spring源码解析之事务传播特性

2021-10-12阅读(5151)评论(0)推荐()

今天带大家分析Spring源码,文中对Spring事务传播特性做了非常详细的介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下

spring事物传播propagation类别含义详解

2021-11-05阅读(8449)评论(0)推荐()

这篇文章主要介绍了spring事物传播propagation类别含义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

深入理解Spring的事务传播行为

2021-10-06阅读(9403)评论(0)推荐()

spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所...

Spring 事务隔离与事务传播的详解与对比

2021-10-12阅读(8245)评论(0)推荐()

这篇文章主要介绍了Spring 事务隔离与事务传播的详解与对比的相关资料,Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作,需要的朋友可以参...

Spring中的事务传播行为示例详解

2021-11-05阅读(9600)评论(0)推荐()

这篇文章主要给大家介绍了关于Spring中事务传播行为的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋...

Spring事务传播行为问题解决

2021-10-12阅读(10471)评论(0)推荐()

这篇文章主要介绍了Spring事务传播行为问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

取消

有人回复邮件通知

提交评论

© 2021 编程之家 

工信部备案号:琼ICP备2022000316号

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐