1. 程式人生 > >spring多資料來源動態切換及事務

spring多資料來源動態切換及事務

原文地址:http://blog.csdn.net/liuxiao723846/article/details/43526549

1、使用了spring的aop思想,實現了動態資料來源的切換。

2、spring的事務管理,是基於資料來源的,所以如果要實現動態資料來源切換,而且在同一個資料來源中保證事務是起作用的話,就需要注意二者的順序問題,即:在事物起作用之前就要把資料來源切換回來。

         舉一個例子:web開發常見是三層結構:controller、service、dao。一般事務都會在service層加的,如果使用spring的宣告式事物管理,那麼在呼叫service層程式碼之前,spring會通過aop的方式動態新增事務控制程式碼,所以如果要想保證事物是有效的,那麼必須spring新增事務之前把資料來源動態切換過來,也就是動態切換資料來源的aop要至少在service上新增,而且要在spring宣告式事物aop之前新增。

          最簡單的方式是,把動態切換資料來源的aop加到controller層,這樣在controller層裡面就可以確定下來資料來源了。不過,這樣有一個缺點就是,每一個controller綁定了一個數據源,不靈活。對於這種:一個請求,需要使用兩個以上資料來源中的資料完成的業務,就無法實現了。

           針對上面的這種問題,可以考慮把動態切換資料來源的aop放到service層,但要注意一定要在事務aop之前來完成。這樣,對於一個需要多個數據源資料的請求,我們只需要在controller裡面注入多個service實現即可。但這種做法的問題在於,controller層裡面會涉及到一些不必要的業務程式碼,例如:合併兩個資料來源中的list...

           針對上面的問題,可以再考慮一種方案,就是把事務控制到dao層,然後在service層裡面動態切換資料來源。

其他有參考價值的文章:

http://blog.csdn.net/rj042/article/details/21654627

http://blog.csdn.net/wangpeng047/article/details/8866239

http://blog.csdn.net/wangpeng047/article/details/43450189

http://download.csdn.net/download/wangpeng047/8419953

http://uule.iteye.com/blog/2126533