当前位置: 首页 > news >正文

佛山专业网站营销餐厅网站模版

佛山专业网站营销,餐厅网站模版,网站建设中栏目是什么,容县网站建设目录 Spring中事务的实现编程式事务声明式事务Transactional 作⽤范围Transactional 参数说明注意事项Transactional ⼯作原理 MySQL 事务隔离级别Spring 事务隔离级别事务传播机制 Spring中事务的实现 Spring中事务操作分为两类#xff1a; 1.编程式事务 2.声明式事务 编程… 目录 Spring中事务的实现编程式事务声明式事务Transactional 作⽤范围Transactional 参数说明注意事项Transactional ⼯作原理 MySQL 事务隔离级别Spring 事务隔离级别事务传播机制 Spring中事务的实现 Spring中事务操作分为两类 1.编程式事务 2.声明式事务 编程式事务 Spring ⼿动操作事务和上⾯ MySQL 操作事务类似它也是有 3 个重要操作步骤 1.开启事务 2.提交事务 3.回滚事务 SpringBoot 内置了两个对象DataSourceTransactionManager ⽤来获取事务开启事务、提交或回滚事务的⽽ TransactionDefinition 是事务的属性在获取事务的时候需要将 TransactionDefinition 传递进去从⽽获得⼀个事务 TransactionStatusRestControllerpublic class UserController {Resourceprivate UserService userService;// JDBC 事务管理器Resourceprivate DataSourceTransactionManager dataSourceTransactionManager;// 定义事务属性Resourceprivate TransactionDefinition transactionDefinition;RequestMapping(/sava)public Object save(User user) {// 开启事务TransactionStatus transactionStatus dataSourceTransactionManager.getTransaction(transactionDefinition);// 插⼊数据库int result userService.save(user);// 提交事务dataSourceTransactionManager.commit(transactionStatus);// // 回滚事务// dataSourceTransactionManager.rollback(transactionStatus);return result;} }声明式事务 声明式事务的实现很简单只需要在需要的⽅法上添加 Transactional 注解就可以实现了⽆需⼿动开启事务和提交事务进⼊⽅法时⾃动开启事务⽅法执⾏完会⾃动提交事务如果中途发⽣了没有处理的异常会⾃动回滚事务接下⾥使⽤以下代码分别设置 Transactional 注解和不设置 Transactional Transactional 作⽤范围 Transactional 可以⽤来修饰⽅法或类 1.修饰⽅法时需要注意只能应⽤到 public ⽅法上否则不⽣效。推荐此种⽤法。 2.修饰类时表明该注解对该类中所有的 public ⽅法都⽣效。 Transactional 参数说明 注意事项 Transactional 在异常被捕获的情况下不会进⾏事务⾃动回滚. 程序中发生异常但被 try-catch处理之后不自动回滚事务的解决方案 1.将异常继续跑出去(代理对象就能感知到异常也就能自动的回滚事务) 2.使用代码⼿动回滚事务在⽅法中使⽤ TransactionAspectSupport.currentTransactionStatus() 可以得到当前的事务然后设置回滚⽅法 setRollbackOnly 就可以实现回滚了 Transactional ⼯作原理 Transactional 是基于 AOP 实现的AOP ⼜是使⽤动态代理实现的。如果⽬标对象实现了接⼝默认情况下会采⽤ JDK 的动态代理如果⽬标对象没有实现了接⼝,会使⽤ CGLIB 动态代理。 Transactional 在开始执⾏业务之前通过代理先开启事务在执⾏成功之后再提交事务。如果中途遇到的异常则回滚事务。 MySQL 事务隔离级别 READ UNCOMMITTED读未提交也叫未提交读该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据⽽未提交的数据可能会发⽣回滚因此我们把该级别读取到的数据称之为脏数据把这个问题称之为脏读。 READ COMMITTED读已提交也叫提交读该隔离级别的事务能读取到已经提交事务的数据因此它不会有脏读问题。但由于在事务的执⾏中可以读取到其他事务提交的结果所以在不同时间的相同 SQL 查询中可能会得到不同的结果这种现象叫做不可重复读。 REPEATABLE READ可重复读是 MySQL 的默认事务隔离级别它能确保同⼀事务多次查询的结果⼀致。但也会有新的问题⽐如此级别的事务正在执⾏时另⼀个事务成功的插⼊了某条数据但因为它每次查询的结果都是⼀样的所以会导致查询不到这条数据⾃⼰重复插⼊时⼜失败因为唯⼀约束的原因。明明在事务中查询不到这条信息但⾃⼰就是插⼊不进去这就叫幻读 Phantom Read。 SERIALIZABLE序列化事务最⾼隔离级别它会强制事务排序使之不会发⽣冲突从⽽解决了脏读、不可重复读和幻读问题但因为执⾏效率低所以真正使⽤的场景并不多。 Spring 事务隔离级别 Isolation.DEFAULT以连接的数据库的事务隔离级别为主。 Isolation.READ_UNCOMMITTED读未提交可以读取到未提交的事务存在脏读。 Isolation.READ_COMMITTED读已提交只能读取到已经提交的事务解决了脏读存在不可重复读。 Isolation.REPEATABLE_READ可重复读解决了不可重复读但存在幻读MySQL默认级别。 Isolation.SERIALIZABLE串⾏化可以解决所有并发问题但性能太低。 事务传播机制 Spring 事务传播机制定义了多个包含了事务的⽅法相互调⽤时事务是如何在这些⽅法间进⾏传递的。 事务传播机制规定多个事务在相互调用时事务的执行行为。 Spring 事务传播机制包含以下 7 种 Propagation.REQUIRED默认的事务传播级别它表示如果当前存在事务则加⼊该事务如果当前没有事务则创建⼀个新的事务。 Propagation.SUPPORTS如果当前存在事务则加⼊该事务如果当前没有事务则以⾮事务的⽅式继续运⾏。 Propagation.MANDATORYmandatory强制性如果当前存在事务则加⼊该事务如果当前没有事务则抛出异常。 Propagation.REQUIRES_NEW表示创建⼀个新的事务如果当前存在事务则把当前事务挂起。也就是说不管外部⽅法是否开启事务Propagation.REQUIRES_NEW 修饰的内部⽅法会新开启⾃⼰的事务且开启的事务相互独⽴互不⼲扰。 Propagation.NOT_SUPPORTED以⾮事务⽅式运⾏如果当前存在事务则把当前事务挂起。 Propagation.NEVER以⾮事务⽅式运⾏如果当前存在事务则抛出异常。 Propagation.NESTED如果当前存在事务则创建⼀个事务作为当前事务的嵌套事务来运⾏如果当前没有事务则该取值等价PROPAGATION_REQUIRED。
http://www.pierceye.com/news/381844/

相关文章:

  • 网站空间可以换吗进网站备案
  • 番禺建设网站开发软件工程专业介绍
  • 如何做网站定位网站建设报价新鸿儒
  • 商务网站建设包含了河北招投标公共服务平台
  • 高权重网站怎么发软文外贸平台app
  • nas服务器 做网站网页设计页面图片
  • 青海建设协会网站电子商务网站备案
  • 性价比高的广州网站建设不同用户入口的网站样板
  • 投资交易网站开发黑镜wordpress主题破解
  • 文化传媒公司网站建设西渡网站建设
  • 购物网站为什么做移动端seo优化快速排名
  • iis服务器网站301重定向怎么做国家企业信息公开网查询系统
  • 免费家具网站模板做网站去什么公司好
  • 五个网站南宁网页制作培训
  • 枣庄建设网站wordpress如何自己编辑
  • 河南省城乡住房建设厅网站首页哪个公司网站备案快
  • 湘潭做网站价格优选磐石网络微信里怎么进入自己的公众号
  • 孟州网站wordpress主题游戏cms
  • 用php做的网站怎么上传莱州教体局网站
  • 网站互动性无锡模板建站
  • 中铁十六局工资明细沧州网站seo公司
  • 北京网站建设软件网页制作自我介绍源代码
  • 怎么注册公司的网站免费可以做旅游海报 的网站
  • 贵阳网站建设包首页微商建立网站
  • ppt制作软件全模板免费大连seo网站管理
  • 网站门户设计设计师的网站有哪些
  • 旅游公司网站建设百度一下官方下载安装
  • 网站上传大马后怎么做宁波seo推广公司电话
  • 长沙建网站培训机构织梦网站采集侠怎么做
  • 行政事业单位网站建设动漫设计与制作大学