spring 事务管理,查询数据不一致的问题

zhuyouyong 2013-04-25 05:00:48
如题,代码基本功能描述:接口A中有两个接口:B(接口)、C(接口)
接口B进行数据更新操作:通过person表中的id获取person,然后更新person.name的值
接口C查询更新的数据操作:通过更新后的name值,查询接口B更新的那条数据

A接口使用了spring事务控制,C接口查询为空(查询不到B接口更新的数据),本人理解如果在一个事务里,也就是一个线程中,B接口没有到数据库,但是C接口也是可以查询到B接口更新的数据的!

...全文
310 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyuhua0066 2013-06-07
  • 打赏
  • 举报
回复
你最终的解决办法是什么?
zhuyouyong 2013-04-25
  • 打赏
  • 举报
回复
引用 9 楼 tianma630 的回复:
没有commit数据肯定就没有更新 当然查不到了 假设C方法执行完后出现异常rollback了 那么读出来的数据不就变成脏数据了
如果改和查控制在一个事务中应该能查到吧?
tianma630 2013-04-25
  • 打赏
  • 举报
回复
没有commit数据肯定就没有更新 当然查不到了 假设C方法执行完后出现异常rollback了 那么读出来的数据不就变成脏数据了
liuyuhua0066 2013-04-25
  • 打赏
  • 举报
回复
问题是出在提交延迟上面 跟事务没有关系 C不是一个事务 boolean flag = b.update(); if(flag) { c.query(); } 这样试试?
zhuyouyong 2013-04-25
  • 打赏
  • 举报
回复
打断点数据就出来了,延迟也就那么1秒不到的时间,断点打在C,数据的已经更新到数据库的,我觉得还是提交到数据库延迟···· 但是用spring事务,将B、C放在一个事务却不能解决···
liuyuhua0066 2013-04-25
  • 打赏
  • 举报
回复
你在B执行完update和C之间打个debug 然后看下DB 个人感觉DB里面的记录应该是被更新过的了 至于C查不到可能是因为查询的是缓存数据?
zhuyouyong 2013-04-25
  • 打赏
  • 举报
回复
呵呵,我只是打个比方,Person 有三个属性,数据库对应三个字段: id name age 1 jack 20 B接口更新数据后,变为: id name age 1 leo 20 现在C接口去查询数据name = 'leo'的person,这条刚刚更新的数据就是出不来,个人猜想可能是事务还没有提交到数据库造成的···起初想把更新和查询控制在一个事务,现在发现还是有同样的问题···
liuyuhua0066 2013-04-25
  • 打赏
  • 举报
回复
引用 3 楼 zhuyouyong 的回复:
如果提交后,立即查询,时间间隔在毫秒级,那么会存在查询不到数据的情况。这个实验我做过。
这种延迟在程序中确实不好处理 既然这样那你为什么C查询的时候 不根据id来查? 有什么特殊的业务需求?
zhuyouyong 2013-04-25
  • 打赏
  • 举报
回复
如果提交后,立即查询,时间间隔在毫秒级,那么会存在查询不到数据的情况。这个实验我做过。
zhuyouyong 2013-04-25
  • 打赏
  • 举报
回复
这样会有查询不到的情况吗?因为配置了spring事务,这个应该是自动提交的吧?
liuyuhua0066 2013-04-25
  • 打赏
  • 举报
回复
调用C接口根本就不是事务 只是一个查询而已 在调用完B接口后 立即提交 然后使用C来查询
第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。   第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。   第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架的三个最重要的框架级接口进行了剖析,并对Bean的生命周期进行讲解。   第4章:讲解如何在Spring配置文件中使用Spring 3.0的Schema格式配置Bean的内容,并对各个配置项的意义进行了深入的说明。   第5章:对Spring容器进行解构,从内部探究Spring容器的体系结构和运行流程。此外,我们还将对Spring容器一些高级主题进行深入的阐述。   第6章:我们从Spring AOP的底层实现技术入手,一步步深入到Spring AOP的内核中,分析它的底层结构和具体实现。   第7章:对如何使用基于AspectJ配置AOP的知识进行了深入的分析,这包括使用XML Schema配置文件、使用注解进行配置等内容。   第8章:介绍了Spring所提供的DAO封装层,这包括Spring DAO的异常体系、数据访问模板等内容。   第9章:介绍了Spring事务管理的工作机制,通过XML、注解等方式进行事务管理配置,同时还讲解了JTA事务配置知识。   第10章:对实际应用中Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有云遮雾罩的感觉。   第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。   第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。   第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。   第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。   第15章:对Spring MVC框架进行详细介绍,对REST风格编程方式进行重点讲解,同时还对Spring 3.0的校验和格式化框架如果和Spring MVC整合进行讲解。   第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。   第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、项目设计、代码开发、单元测试直到应用部署经历整个实际项目的整体开发过程。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧