欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中DAO被循環(huán)調(diào)用的時(shí)候數(shù)據(jù)不實(shí)時(shí)更新的解決方法

 更新時(shí)間:2014年08月28日 11:52:36   投稿:mdxy-dxy  
這篇文章主要介紹了Spring中DAO被循環(huán)調(diào)用的時(shí)候數(shù)據(jù)不實(shí)時(shí)更新的解決方法,需要的朋友可以參考下

在描述問(wèn)題之前先說(shuō)明幾個(gè)前提,假設(shè)在Spring的配置文件中使用下面的方式配置了數(shù)據(jù)庫(kù)的事務(wù):

 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource"/>
 </bean> 
 <tx:annotation-driven transaction-manager="transactionManager" />

現(xiàn)在有UserDao和SecurityService:

@Repository
 public class UserDao {
   public User getUser() {
     // query user from user table
     return queryObject("select * from user order by id desc limit 1");
   }
 }
@Service
 @Transactional
 public class SecurityService {
   @Autowired
   private UserDao userDao;
 
   public void checkUserInfo() {
     while(true) {
       User user = userDao.getUser();
       if(user != null && "Tom".equals(user.getName()) {
         System.out.println("Tom is here");
         break;
       }
     }
   }
 }

在調(diào)用SecurityService#checkUserInfo()方法的過(guò)程中,通過(guò)userDao#getUser()方法獲取到的數(shù)據(jù)是不變的,即使這個(gè)時(shí)候新插入了一條name為T(mén)om的數(shù)據(jù)循環(huán)也不會(huì)結(jié)束。另外將SecurityService上面的@Transactional注解去掉也無(wú)濟(jì)于事。
首先想到會(huì)不會(huì)是數(shù)據(jù)庫(kù)連接池的問(wèn)題,換成了Spring自帶的也是如此;然后從JdbcTemplate里面直接調(diào)用了Connection對(duì)象,使用原始的JDBC方式操作數(shù)據(jù)庫(kù),這個(gè)時(shí)候數(shù)據(jù)是實(shí)時(shí)變化的,于是想到應(yīng)該是Spring的事務(wù)和當(dāng)前操作線程進(jìn)行綁定了。查看源代碼進(jìn)入之后果然在DataSourceUtils#doGetConnection方法里面發(fā)現(xiàn)了Spring在每個(gè)線程的每個(gè)DataSource上創(chuàng)建了一個(gè)Connection并且與事務(wù)進(jìn)行了綁定。因?yàn)閠x:annotation-driven配置文件對(duì)所有的Service層(加了@Service注解的類(lèi))進(jìn)行了事務(wù)綁定,所以無(wú)論是否使用@Transactional都在同一個(gè)線程中綁定了同一個(gè)Connection,只是不進(jìn)行事務(wù)操作而已。
經(jīng)過(guò)多次實(shí)驗(yàn)和查找資料,最后終于找到了完美的解決方法:只要在上述的checkUserInfo方法中加上 @Transactional(propagation = Propagation.NOT_SUPPORTED) 注解就可以了。當(dāng)然也可以獲取到Connection然后手工進(jìn)行操作,也可以使用DateUtils包進(jìn)行操作。

相關(guān)文章

  • Java微信公眾平臺(tái)開(kāi)發(fā)(11) 微信三大平臺(tái)的關(guān)聯(lián)

    Java微信公眾平臺(tái)開(kāi)發(fā)(11) 微信三大平臺(tái)的關(guān)聯(lián)

    這篇文章主要介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第十一步,微信開(kāi)發(fā)中微信公眾平臺(tái)、開(kāi)放平臺(tái)和商戶平臺(tái)的關(guān)聯(lián),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java 在PDF中添加頁(yè)面跳轉(zhuǎn)按鈕功能(代碼演示)

    Java 在PDF中添加頁(yè)面跳轉(zhuǎn)按鈕功能(代碼演示)

    這篇文章主要介紹了Java 在PDF中添加頁(yè)面跳轉(zhuǎn)按鈕功能,本文給大家提供了多種功能的按鈕,需要的朋友可以參考下
    2019-11-11
  • 使用SpringCloudAlibaba整合Dubbo

    使用SpringCloudAlibaba整合Dubbo

    這篇文章主要介紹了使用SpringCloudAlibaba整合Dubbo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧

    Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧

    做項(xiàng)目的時(shí)候我們肯定接觸過(guò)很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • spring cloud實(shí)現(xiàn)前端跨域問(wèn)題的解決方案

    spring cloud實(shí)現(xiàn)前端跨域問(wèn)題的解決方案

    這篇文章主要介紹了 spring cloud實(shí)現(xiàn)前端跨域問(wèn)題的解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • springboot docker原理及項(xiàng)目構(gòu)建

    springboot docker原理及項(xiàng)目構(gòu)建

    這篇文章主要介紹了springboot docker原理及項(xiàng)目構(gòu)建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Springcloud Config配置中心使用與相關(guān)介紹

    Springcloud Config配置中心使用與相關(guān)介紹

    springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用
    2022-09-09
  • Java中的SkyWalking監(jiān)控告警詳解

    Java中的SkyWalking監(jiān)控告警詳解

    這篇文章主要介紹了Java中的SkyWalking監(jiān)控告警詳解,SkyWalking在6.x版本中新增了告警功能,其核心在于config/alarm-settings.yaml文件中,該文件分為rules和webhooks兩部分,需要的朋友可以參考下
    2023-11-11
  • Java 求解如何把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)

    Java 求解如何把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)

    這篇文章主要介紹了Java 求解把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)的代碼,總之需要觀察示例節(jié)點(diǎn)的規(guī)律,需要記錄上個(gè)節(jié)點(diǎn)的情況,注意引入前驅(qū)節(jié)點(diǎn)pre,具體實(shí)例代碼跟隨小編一起看看吧
    2021-11-11
  • 模仿Spring手寫(xiě)一個(gè)簡(jiǎn)易的IOC

    模仿Spring手寫(xiě)一個(gè)簡(jiǎn)易的IOC

    這篇文章主要介紹了模仿Spring手寫(xiě)一個(gè)簡(jiǎn)易的IOC,幫助大家更好的理解和學(xué)習(xí)spring框架,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論