千家信息网

如何解决由于错误使用SpringBoot导致的问题

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,如何解决由于错误使用SpringBoot导致的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在某一天,有个业务线同鞋
千家信息网最后更新 2024年11月19日如何解决由于错误使用SpringBoot导致的问题

如何解决由于错误使用SpringBoot导致的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在某一天,有个业务线同鞋找到笔者,说,他们的一个应用事务失败了没有回滚。已经与DBA对过数据,且自行查看代码中的事务使用方式也没有问题。后在笔者的多番劳作中,找到了问题的原因。说起来引起该故障的原因很简单,但查询的新路历程值得说道说道。

如果业务童鞋说的正确的话。事务配置成功、且有效。那这个问题就表现的很诡异,或者说几乎不可能。所以笔者第一个怀疑的对象是:

1. 事务配置错误

通过简单跟踪、测试,敲定事务确实没啥问题。。此时脑海中1万个问号??

2. 后续周围的同事,都对该问题比较感兴趣,一一提出假设,最终都被一一排除。

无奈之下,笔者只好一点点跟踪代码,虽说,Idea的debug模式已经很好用,但一通操作下来,还有有些难度。

好在黄天不负苦心人,灵光乍现,猜测:会不会是执行的数据源并没有事务。与应用启动的时,创建的数据源并不是同一个。

抱着试试看的态度,我把断点放在了启动时,数据源bean生成的位置。最终发现,果然启动生成的bean与运行中的bean并不是同一个。。汗颜!!!

下面是原因说明:

根据业务代码,产生该问题的条件

  1. 启动过程中,吃掉启动异常,导致容器无法因为异常 而 终止掉

  2. 启动过程中,抛出异常

原因分析

  1. spring容器启动之后,初始化bean: DataSource (A)

  2. mybatis缓存DataSource(A)

  3. 容器启动异常,spring清除所有已缓存的bean信息。

  4. 由于启动类中,吃掉了容器启动异常。容器未挂掉

  5. 此时dubbo请求进来之后,由于spring中的所有bean信息都被清除,因此。容器重新初始化bean。此时生成DataSource (B)、事务管理器

  6. 事务方法执行前,事务管理器,对DataSource (B) 设置setAutoCommit=0。并将DataSource与事务关系存放到map(C)中

  7. myabtis在执行时会从 第6步的map中,根据DataSource(A) 获取事务信息。在这种情况下,是无法获取到的。导致执行sql执行的采用的是DataSource(A)。而这个DataSource(A)从未设置setAutoCommit=0。导致事务无法回滚

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

事务 问题 容器 原因 数据 笔者 业务 代码 信息 数据源 生成 错误 事务管理 缓存 过程 帮助 应用 管理 跟踪 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 近几年网络安全事件 山东济南服务器授权代理云空间 妄想山海捏脸数据库在哪里 科技互联网大数据 新洲区电商网络安全维护销售方法 网络技术与计算机技术 北京联电国际网络技术有限公司 深圳软件开发哪家好 开源大数据库 淘宝是什么软件开发 怎么查软件安装在哪台服务器 年度网络安全大事件 外网服务器看片 数据库怎样进行选择存储 pilosa位图数据库教程 数据库的索引图示 苍穹数据库软件安装流程 岳阳市公安局网络安全保卫支队 玩英雄联盟服务器不稳定 土地利用现状数据库地类图斑 攀枝花网络技术安全公司 arm服务器特别卡 盖乐世社区服务器错误 开学网络安全督查报告 软件开发人力资源外包合同 禁止服务器管理器启动 男友做软件开发的感觉他很懒散 自己怎么买服务器端口 青岛电子学校计算机网络技术 温州数据库灭火器单价
0