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

做网站 需求网页制作软件app免费

做网站 需求,网页制作软件app免费,网站的费用多少,广东平台网站建设找哪家文章目录 简单说说spring事务失效的场景Spring 事务失效的7种场景1.1、未启用[spring事务管理](https://so.csdn.net/so/search?qspring事务管理spm1001.2101.3001.7020)功能1.2、方法不是public类型的1.3、数据源未配置事务管理器1.4、自身调用问题1.5、异常类型错误1.6… 文章目录 简单说说spring事务失效的场景Spring 事务失效的7种场景1.1、未启用[spring事务管理](https://so.csdn.net/so/search?qspring事务管理spm1001.2101.3001.7020)功能1.2、方法不是public类型的1.3、数据源未配置事务管理器1.4、自身调用问题1.5、异常类型错误1.6、异常被吞了1.7、业务和spring事务代码必须在一个线程中2、如何快速定位事务相关bug 简单说说spring事务失效的场景 Spring 事务失效的7种场景 未启用spring事务管理功能方法不是public类型的数据源未配置事务管理器自身调用问题异常类型错误异常被吞了业务和spring事务代码必须在一个线程中 1、数据库不支持事务 2、没有配置事务管理器 3、事务所在的方法没有被public修饰 4、异常被catch没有抛出事务会失效 5、异常类型错误,默认是runtimeException才会回滚的 ​ 解决方案:加上Transactional(rollbackFor Exception.class)注解;这样Exception也会回滚 6、用final或者static关键字修饰的方法事务会失效 7、事务需要从外部调用Spring 自调事务用会失效。即相同类里边A 方法没有事务B 方法有事务A 方法调用 B 方法则 B 方法的事务会失效这点尤其要注意因为代理模式只拦截通过代理传入的外部方法调用所以自调用事务是不生效的。 1.1、未启用spring事务管理功能 EnableTransactionManagement 注解用来启用spring事务自动管理事务的功能这个注解千万不要忘记写了。 1.2、方法不是public类型的 Transaction 可以用在类上、接口上、public方法上如果将Trasaction用在了非public方法上事务将无效。 1.3、数据源未配置事务管理器 spring是通过事务管理器了来管理事务的一定不要忘记配置事务管理器了要注意为每个数据源配置一个事务管理器 Bean public PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource); }1.4、自身调用问题 spring是通过aop的方式对需要spring管理事务的bean生成了代理对象然后通过代理对象拦截了目标方法的执行在方法前后添加了事务的功能所以必须通过代理对象调用目标方法的时候事务才会起效。 看下面代码大家思考一个问题当外部直接调用m1的时候m2方法的事务会生效么 Component public class UserService {public void m1(){this.m2();}Transactionalpublic void m2(){//执行db操作} }显然不会生效因为m1中通过this的方式调用了m2方法而this并不是代理对象this.m2()不会被事务拦截器所以事务是无效的如果外部直接调用通过UserService这个bean来调用m2方法事务是有效的上面代码可以做一下调整如下1在UserService中注入了自己此时m1中的m2事务是生效的. Component public class UserService {Autowired //1private UserService userService;public void m1() {this.userService.m2();}Transactionalpublic void m2() {//执行db操作} }重点必须通过代理对象访问方法事务才会生效。 1.5、异常类型错误 spring事务回滚的机制对业务方法进行try catch当捕获到有指定的异常时spring自动对事务进行回滚那么问题来了哪些异常spring会回滚事务呢 并不是任何异常情况下spring都会回滚事务默认情况下RuntimeException和Error的情况下spring事务才会回滚。 也可以自定义回滚的异常类型 Transactional(rollbackFor {异常类型列表})1.6、异常被吞了 当业务方法抛出异常spring感知到异常的时候才会做事务回滚的操作若方法内部将异常给吞了那么事务无法感知到异常了事务就不会回滚了。 如下代码事务操作2发生了异常但是被捕获了此时事务并不会被回滚 Transactional public void m1(){//事务操作1try{//事务操作2内部抛出了异常}catch(Exception e){} }1.7、业务和spring事务代码必须在一个线程中 spring事务实现中使用了ThreadLocalThreadLocal大家应该知道吧可以实现同一个线程中数据共享必须是同一个线程的时候数据才可以共享这就要求业务代码必须和spring事务的源码执行过程必须在一个线程中才会受spring事务的控制比如下面代码方法内部的子线程内部执行的事务操作将不受m1方法上spring事务的控制这个大家一定要注意 Transactional public void m1() {new Thread() {//一系列事务操作}.start(); }2、如何快速定位事务相关bug 2种方式 方式1看日志 如果你使用了logback或者log4j来输出日志可以修改一下日志级别为debug模式可以看到事务的详细执行日志帮助你定位错误 方式2调试代码 如果你对源码比较了解那么你会知道被spring管理事务的业务方法执行的时候都会被TransactionInterceptor拦截器拦截会进入到它的invoke方法中咱们可以在invoke方法中设置一些断点可以看到详细的执行过程排错也就比较容易了。 整体上来说还是需要你深入理解原理原理了解了写代码的时候本身就会避免很多坑。
http://www.yutouwan.com/news/75391/

相关文章:

  • 重庆网站到首页排名做网站跟推广哪家公司好
  • 十堰商城网站建设网站应用是什么
  • 在线解压rar网站建设一个电影网站怎么做
  • 华为网站建设方案模板下载wordpress同步公众号
  • 本地企业网站建设代理公司注册需要注意什么
  • 上海市区网站设计制作公司wordpress自动删除p标签
  • 网站建设视频教学十九冶成都建设有限公司网站
  • 3天网站seo优化成为超级品牌西安专业网站开发哪家好
  • 网站seo搜索引擎优化怎么做网站开发用px好还是em好
  • html代码跟网站运营的关系做网站 赚钱多吗
  • 个人网站效果图做那种网站赚钱
  • 建设网站如何写文案邯郸市网络建站
  • 中润建设集团有限公司网站群凡客诚品现状2022
  • 网站建设最好的教程模版网站怎么做
  • 怎呀做网站成都建设网站哪个好
  • 个旧网站建设丹东seo优化
  • 怎么做网站关键词搜索庭院景观设计
  • 重庆seo网站策划哈尔滨报刊零售店地址
  • 电商网站开发数据库设计微信网站和手机网站的区别
  • 上海设计公司电话晨阳seo
  • 做网站要用什么编程语言免费加客源
  • 网站平台建设方案策划书广东品牌网站建设
  • 如何自己免费做网站网站开发笔试题
  • 礼品网站建设公司大数据学出来做什么工作
  • 网站建设可行性分析表域名解析在线工具
  • 如何查询网站点击率玉溪做网站公司
  • 深圳网站建设哪家公司好展会设计公司简介
  • 哈尔滨网站建设公司名字扒下来的网站怎么做修改
  • 深圳设计网站建设公司wordpress帖子增强
  • 制作旅游网站设计概述app策划书模板