【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

最近遇到一个很棘手的问题,至今也解释不清楚原因,不过已经找到了解决方案。

先来看看Propagation属性的值含义,@Transactional中Propagation属性有7个选项可供选择:

  1. Propagation.MANDATORY。当前方法必须在已经定义的Transaction中运行,如果没有已定义的Transaction则抛出异常。

  2. Propagation.NEST。如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。

  3. Propagation.NEVER 。当前方法不应在Transaction中运行,如果存在已经定义的Transaction则抛出异常。

  4. Propagation.NOT_SUPPORTED。当前方法不应在Transaction中运行,如果存在已经定义的Transaction,则该Transaction暂停(挂起)直至该方法运行完毕。

  5. Propagation.REQUIRED。 默认值。当前方法必须在Transaction中运行。如果存在已经定义的Transaction,则该方法在已定义的Transaction中运行;如果不存在已经定义的Transaction,则该方法新开一个Transaction并在其中运行。

  6. Propagation.REQUIRES_NEW。当前方法必须在新开的Transaction中运行。如果存在已经定义的Transaction,则该已定义的Transaction暂停直至新开的Transaction执行完毕。

  7. Propagation.SUPPORTS。当前方法不需要在Transaction中运行,但如果存在已经定义的Transaction,则该方法也可以在Transaction中正常执行。

遇到的问题是这样的:

// surports 查询不到同一调用方法其它事务提交的更新。 原因未知
a() {
  //surports
     b.b();//requstd or request_new
     b.c(); //surports --查询不到b方法中更新的数据

解决方式:

避免这种情况的方法, a()方法不被aop代理

现在只是用这种方式解决了,但是想不明白为什么要这么做,如果有哪位大神能解释清楚原因请告知一下,非常感谢!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2264.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm界面怎么调成中文版(pycharm怎么破解)

    文章目录汉化方法官方汉化与第三方对比Java的idea在更新2020.1时就更新了官方汉化,当时Pycharm还没用出现汉化,但这两天提示我更新2020.1.1的时候,我发现pycharm也出现了官方汉化,在此建议你要是想用官方汉化,先把你的pycharm升级为最新版本。汉化方法打开pycharm左上角的file(文件)>选择settings(设置)>打开plugins(插件)>搜索chinese(中文插件),下载好后重启pycharm。官方汉化与第三方对比这里使用

    2022年4月10日
    144
  • 心血漏洞(OpenSSL升级)[通俗易懂]

    心血漏洞(OpenSSL升级)[通俗易懂]查看系统OpenSSL版本:opensslversion,查看该版本是否存在心血漏洞,受影响版本为:1.0.1—1.0.1f/1.0.2Beta1下载最新的OpenSSL安装包并上传到服务器下载地址:https://www.openssl.org/安装依赖:yuminstall-ygcczlib-develpam-devel开启telnet服务yum-yinstalltelnet-serversed-i”s/yes/no/g”/etc/xine.

    2022年7月17日
    20
  • CentOS中设置系统级代理

    CentOS中设置系统级代理YUM代理设置 编辑/etc/yum.conf,在最后加入#Proxyproxy=http://username:password@proxy_ip:port/ 也可以使用proxy_username和proxy_password来配置代理的用户名和密码 这样的配置完成后,所有的用户在使用yum时,都会使用代理,可以说是全局代理。 如果需要为单独的用户配置

    2022年5月18日
    40
  • SCOPUS数据库_数据库的构成

    SCOPUS数据库_数据库的构成ScienceDirect数据库1.Elsevier简介荷兰Elsevier是全球最大的科学文献出版发行商,已有180多年的历史。其产品涵盖科学、技术和医学等各个领域,包括1800多种学术期刊(大

    2022年8月2日
    11
  • java voliate_voliate关键字及其示例

    java voliate_voliate关键字及其示例voliate关键字1使变量在线程间可见对于避免不可见性问题,Java还提供了一种弱形式的同步,即使用了volatile关键字。该关键字确保了对一个变量的更新对其他线程可见。当一个变量被声明为volatile时候,线程写入时候不会把值缓存在寄存器或者或者在其他地方,当线程读取的时候会从主内存重新获取最新值,而不是使用当前线程的拷贝内存变量值。volatile虽然提供了可见性保证,但是不能使用他来…

    2022年4月29日
    85
  • java集合系列——List集合之Vector介绍(四)

    Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。Vector 是同步的,可用于多线程。

    2022年2月26日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号