Spring動態(tài)多數(shù)據(jù)源配置實例Demo
最近由于咨詢spring如何配置多數(shù)據(jù)源的人很多,一一回答又比較麻煩,而且以前的博文中的配置也是有問題,因此特此重新發(fā)布一個Demo給大家。
Demo中共有兩個數(shù)據(jù)源,即MySQL和Oracle,并已經(jīng)進行簡單測試,動態(tài)切換數(shù)據(jù)源是沒有問題的,希望借此Demo能幫助到大家。
Demo下載地址:
Spring動態(tài)切換多數(shù)據(jù)源Demo:http://xiazai.jb51.net/201701/yuanma/dynamicDatasourceDemo_jb51.rar
另外我給些說明,闡述下多數(shù)據(jù)源配置時的重點:
1. 注意事務(wù)攔截器的配置
這是首要的一條。首先你要明白,Spring的事務(wù)管理是與數(shù)據(jù)源綁定的,一旦程序執(zhí)行到事務(wù)管理的那一層(如service)的話,由于在進入該層之前事務(wù)已經(jīng)通過攔截器開啟,因此在該層切換數(shù)據(jù)源是不行的,明白事務(wù)的原理是尤為重要的,我之前的文章中,將切換數(shù)據(jù)源的攔截器配置在了Dao層是有問題的(因為是示例,所以粗心了,對誤導了大家我表示道歉),但提供的思路是沒有問題的。
Demo中將切換數(shù)據(jù)源的攔截器(dataSourceInterceptor)配置在了事務(wù)攔截器(txadvice)的上一層,也就是Controller層。
2. 注意數(shù)據(jù)庫表的創(chuàng)建
一些人喜歡用hibernate的自動創(chuàng)建表的功能,但需要注意,在多數(shù)據(jù)源中,尤其是不同數(shù)據(jù)庫的多數(shù)據(jù)源,想都自動建表是不行的。因為Hibernate自動建表是在項目啟動時觸發(fā)的,因此只會建立項目配置的默認數(shù)據(jù)源的表,而其他數(shù)據(jù)源的表則不會自動創(chuàng)建。大家要注意著點。
3. Hibernate的數(shù)據(jù)庫方言(dialect)可以忽略
在多數(shù)據(jù)源時,方言的設(shè)置可以忽略,Hibernate在使用時會自動識別不同的數(shù)據(jù)庫,因此不必糾結(jié)這個配置,甚至不配置也可以。
4. 報No current session錯誤
這個是因為使用了sessionFactory.getCurrentSession()導致的,current session是與線程綁定的,一個線程只會開啟一個Session(除非使用openSession()就不會報錯),因此需要設(shè)置session與線程的綁定關(guān)系。
Demo中使用了Spring管理Hibernate的session,因此在web.xml中配置了OpenSessionInViewFilter,并在hibernate.cfg.xml中配置了current_session_context_class?!綪S:使用Spring管理Hibernate時,可以去掉hibernate.cfg.xml,而全部配置的Spring的配置文件里,即hibernateProperties。看個人喜好吧】
最后,Demo中簡單集成了一些框架,方便大家拿來就用,算是送給大家的福利,關(guān)于那些框架的配置和技術(shù),這里就不再闡述了。想要了解的可以看一下地址:
spring多數(shù)據(jù)源配置:http://www.dbjr.com.cn/article/102282.htm
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot實現(xiàn)rabbitmq消息確認的示例代碼
RabbitMQ的消息確認有兩種, 一種是消息發(fā)送確認,第二種是消費接收確認,本文主要介紹了springboot實現(xiàn)rabbitmq消息確認的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-09-09淺談java中為什么重寫equals后需要重寫hashCode
今天帶各位學習一下java中為什么重寫equals后需要重寫hashCode,文中有非常詳細的圖文介紹及代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Spring如何替換掉默認common-logging.jar
這篇文章主要介紹了Spring如何替換掉默認common-logging.jar,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例
樂觀鎖是一種用于解決并發(fā)沖突的機制,在數(shù)據(jù)庫中用于保護數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2023-08-08關(guān)于easyExcel中讀取Excel表頭的實例說明
EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06詳解jeefast和Mybatis實現(xiàn)二級聯(lián)動的問題
這篇文章主要介紹了詳解jeefast和Mybatis實現(xiàn)二級聯(lián)動的問題,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10