这篇文章主要介绍了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 举报,一经查实,本站将立刻删除。