Spring動(dòng)態(tài)多數(shù)據(jù)源配置實(shí)例Demo
最近由于咨詢spring如何配置多數(shù)據(jù)源的人很多,一一回答又比較麻煩,而且以前的博文中的配置也是有問(wèn)題,因此特此重新發(fā)布一個(gè)Demo給大家。
Demo中共有兩個(gè)數(shù)據(jù)源,即MySQL和Oracle,并已經(jīng)進(jìn)行簡(jiǎn)單測(cè)試,動(dòng)態(tài)切換數(shù)據(jù)源是沒(méi)有問(wèn)題的,希望借此Demo能幫助到大家。
Demo下載地址:
Spring動(dòng)態(tài)切換多數(shù)據(jù)源Demo:http://xiazai.jb51.net/201701/yuanma/dynamicDatasourceDemo_jb51.rar
另外我給些說(shuō)明,闡述下多數(shù)據(jù)源配置時(shí)的重點(diǎn):
1. 注意事務(wù)攔截器的配置
這是首要的一條。首先你要明白,Spring的事務(wù)管理是與數(shù)據(jù)源綁定的,一旦程序執(zhí)行到事務(wù)管理的那一層(如service)的話,由于在進(jìn)入該層之前事務(wù)已經(jīng)通過(guò)攔截器開(kāi)啟,因此在該層切換數(shù)據(jù)源是不行的,明白事務(wù)的原理是尤為重要的,我之前的文章中,將切換數(shù)據(jù)源的攔截器配置在了Dao層是有問(wèn)題的(因?yàn)槭鞘纠?,所以粗心了,?duì)誤導(dǎo)了大家我表示道歉),但提供的思路是沒(méi)有問(wèn)題的。
Demo中將切換數(shù)據(jù)源的攔截器(dataSourceInterceptor)配置在了事務(wù)攔截器(txadvice)的上一層,也就是Controller層。
2. 注意數(shù)據(jù)庫(kù)表的創(chuàng)建
一些人喜歡用hibernate的自動(dòng)創(chuàng)建表的功能,但需要注意,在多數(shù)據(jù)源中,尤其是不同數(shù)據(jù)庫(kù)的多數(shù)據(jù)源,想都自動(dòng)建表是不行的。因?yàn)镠ibernate自動(dòng)建表是在項(xiàng)目啟動(dòng)時(shí)觸發(fā)的,因此只會(huì)建立項(xiàng)目配置的默認(rèn)數(shù)據(jù)源的表,而其他數(shù)據(jù)源的表則不會(huì)自動(dòng)創(chuàng)建。大家要注意著點(diǎn)。
3. Hibernate的數(shù)據(jù)庫(kù)方言(dialect)可以忽略
在多數(shù)據(jù)源時(shí),方言的設(shè)置可以忽略,Hibernate在使用時(shí)會(huì)自動(dòng)識(shí)別不同的數(shù)據(jù)庫(kù),因此不必糾結(jié)這個(gè)配置,甚至不配置也可以。
4. 報(bào)No current session錯(cuò)誤
這個(gè)是因?yàn)槭褂昧藄essionFactory.getCurrentSession()導(dǎo)致的,current session是與線程綁定的,一個(gè)線程只會(huì)開(kāi)啟一個(gè)Session(除非使用openSession()就不會(huì)報(bào)錯(cuò)),因此需要設(shè)置session與線程的綁定關(guān)系。
Demo中使用了Spring管理Hibernate的session,因此在web.xml中配置了OpenSessionInViewFilter,并在hibernate.cfg.xml中配置了current_session_context_class。【PS:使用Spring管理Hibernate時(shí),可以去掉hibernate.cfg.xml,而全部配置的Spring的配置文件里,即hibernateProperties??磦€(gè)人喜好吧】
最后,Demo中簡(jiǎn)單集成了一些框架,方便大家拿來(lái)就用,算是送給大家的福利,關(guān)于那些框架的配置和技術(shù),這里就不再闡述了。想要了解的可以看一下地址:
spring多數(shù)據(jù)源配置:http://www.dhdzp.com/article/102282.htm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java聯(lián)調(diào)生成測(cè)試數(shù)據(jù)工具類(lèi)方式
這篇文章主要介紹了java聯(lián)調(diào)生成測(cè)試數(shù)據(jù)工具類(lèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Java對(duì)接阿里云短信服務(wù)保姆級(jí)教程(新手秒會(huì))
這篇文章主要介紹了如何在阿里云上申請(qǐng)短信服務(wù)以及如何使用Java代碼進(jìn)行對(duì)接,包括申請(qǐng)資質(zhì)、簽名和模板,以及編寫(xiě)Java代碼整合成工具類(lèi)進(jìn)行調(diào)用的步驟,需要的朋友可以參考下2024-12-12
給JavaBean賦默認(rèn)值并且轉(zhuǎn)Json字符串的實(shí)例
這篇文章主要介紹了給JavaBean賦默認(rèn)值并且轉(zhuǎn)Json字符串的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring?Boot?集成JWT實(shí)現(xiàn)前后端認(rèn)證的示例代碼
小程序、H5應(yīng)用的快速發(fā)展,使得前后端分離已經(jīng)成為了趨勢(shì),本文主要介紹了Spring?Boot?集成JWT實(shí)現(xiàn)前后端認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
關(guān)于jar包與war包的區(qū)別及說(shuō)明
這篇文章主要介紹了關(guān)于jar包與war包的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java使用elasticsearch基礎(chǔ)API使用案例講解
這篇文章主要介紹了Java使用elasticsearch基礎(chǔ)API使用案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

