个人业务网站带后台,wordpress编辑模板文字,网站域名保护几年,网站建设正文字体多大合适目录
1.Spring 编程式事务
2.Transactional
3.事务隔离级别
4.Spring 事务传播机制 什么是事务? 事务是⼀组操作的集合, 是⼀个不可分割的操作. 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成 功, 要么同时失败 1.Spri…目录
1.Spring 编程式事务
2.Transactional
3.事务隔离级别
4.Spring 事务传播机制 什么是事务? 事务是⼀组操作的集合, 是⼀个不可分割的操作. 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成 功, 要么同时失败 1.Spring 编程式事务 SpringBoot 内置了两个对象: 1.DataSourceTransactionManager 事务管理器. ⽤来获取事务(开启事务), 提交或回滚事务 2. TransactionDefinition 是事务的属性, 在获取事务的时候需要将 TransactionDefinition 传递进去从⽽获得⼀个事务 TransactionStatus 代码
RequestMapping(/user)
RestController
public class UserController {Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;Autowiredprivate TransactionDefinition transactionDefinition;Autowiredprivate UserService userService;RequestMapping(/register)public Boolean register(String userName, String password){//开启事务TransactionStatus transaction dataSourceTransactionManager.getTransaction(transactionDefinition);Integer result userService.insert(userName, password);System.out.println(插入用户表, result: result);//回滚事务dataSourceTransactionManager.rollback(transaction);//提交事务
// dataSourceTransactionManager.commit(transaction);return true;}
} 当手动回滚时虽然程序会返回注册成功, 但数据库并没有新增数据。 2.Transactional
2.1声明式事务的实现
1. 添加依赖 dependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactId/dependency
2.在需要事务的⽅法上添加 Transactional 注解就可以实现了。 ⽆需⼿动开启事务和提交事 务, 进⼊⽅法时⾃动开启事务, ⽅法执⾏完会⾃动提交事务, 如果中途发⽣了没有处理的异常会⾃动 回滚事务. 注意 1.Transactional 默认只在遇到运⾏时异常和Error时才会回滚 , ⾮运⾏时异常不回滚. 即 Exception的⼦类中, 除了RuntimeException及其⼦类. 2.如果需要回滚指定类型的异常, 可以通过rollbackFor属性来指定 Transactional(rollbackFor IOException.class) 2.2Transactional 作⽤
Transactional 可以⽤来修饰⽅法或类 1.修饰⽅法时: 只有修饰public ⽅法时才⽣效(修饰其他⽅法时不会报错, 也不⽣效) 2. 修饰类时: 对 Transactional 修饰的类中所有的 public ⽅法都⽣效 如果在⽅法执⾏过程中, 出现异常, 且异常未被捕获, 就进⾏事务回滚操作. 如果异常被程序捕获, ⽅法就被认为是成功执⾏, 依然会提交事务 由于异常被捕获了, 所以事务依然得到了提交. 如果需要事务进⾏回滚, 有以下两种⽅式 1.重新抛出异常 try { // 强制程序抛出异常 int a 10 / 0 ; } catch (Exception e){ // 将异常重新抛出去 throw e; } 2.⼿动回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 3.事务隔离级别
Spring 中事务隔离级别有5 种 1.Isolation.DEFAULT : 以连接的数据库的事务隔离级别为主 2.Isolation.READ_UNCOMMITTED : 读未提交, 对应SQL标准中 READ UNCOMMITTED 3.Isolation.READ_COMMITTED : 读已提交,对应SQL标准中 READ COMMITTED 4.Isolation.REPEATABLE_READ : 可重复读, 对应SQL标准中 REPEATABLE READ 5.Isolation.SERIALIZABLE : 串⾏化, 对应SQL标准中 SERIALIZABLE Spring 中事务隔离级别可以通过 Transactional 中的 isolation 属性进⾏设置 Transactional(isolation Isolation.DEFAULT) 不同隔离级别可能会出现的问题 4.Spring 事务传播机制
事务传播机制就是: 多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的
⽐如有两个⽅法A, B都被 Transactional 修饰, A⽅法调⽤B⽅法 以B为视角 Spring 事务传播机制有以下 7 种 重点关注 REQUIRED (默认值) 和 REQUIRES_NEW 1.Propagation.REQUIRED : 默认的事务传播级别. 如果当前存在事务, 则加⼊该事务. 如果当前没 有事务, 则创建⼀个新的事务 2.Propagation.SUPPORTS : 如果当前存在事务, 则加⼊该事务. 如果当前没有事务, 则以⾮事务的 ⽅式继续运⾏ 3.Propagation.MANDATORY :强制性. 如果当前存在事务, 则加⼊该事务. 如果当前没有事务, 则 抛出异常. 4.Propagation.REQUIRES_NEW : 创建⼀个新的事务. 如果当前存在事务, 则把当前事务挂起. 也 就是说不管外部⽅法是否开启事务, Propagation.REQUIRES_NEW 修饰的内部⽅法都会新开 启⾃⼰的事务, 且开启的事务相互独⽴, 互不⼲扰. 5.Propagation.NOT_SUPPORTED : 以⾮事务⽅式运⾏, 如果当前存在事务, 则把当前事务挂起(不 ⽤). 6.Propagation.NEVER : 以⾮事务⽅式运⾏, 如果当前存在事务, 则抛出异常. 7. Propagation.NESTED : 如果当前存在事务, 则创建⼀个事务作为当前事务的嵌套事务来运⾏. 如果当前没有事务, 则该取值等价于 PROPAGATION_REQUIRED 设置事务的传播机制: Transactional(propagation Propagation.REQUIRED) 以上为我个人的小分享如有问题欢迎讨论
都看到这了不如关注一下给个免费的赞