Spring動(dòng)態(tài)多數(shù)據(jù)源配置實(shí)例Demo
最近由于咨詢spring如何配置多數(shù)據(jù)源的人很多,一一回答又比較麻煩,而且以前的博文中的配置也是有問題,因此特此重新發(fā)布一個(gè)Demo給大家。
Demo中共有兩個(gè)數(shù)據(jù)源,即MySQL和Oracle,并已經(jīng)進(jìn)行簡(jiǎn)單測(cè)試,動(dòng)態(tài)切換數(shù)據(jù)源是沒有問題的,希望借此Demo能幫助到大家。
Demo下載地址:
Spring動(dòng)態(tài)切換多數(shù)據(jù)源Demo:http://xiazai.jb51.net/201701/yuanma/dynamicDatasourceDemo_jb51.rar
另外我給些說明,闡述下多數(shù)據(jù)源配置時(shí)的重點(diǎn):
1. 注意事務(wù)攔截器的配置
這是首要的一條。首先你要明白,Spring的事務(wù)管理是與數(shù)據(jù)源綁定的,一旦程序執(zhí)行到事務(wù)管理的那一層(如service)的話,由于在進(jìn)入該層之前事務(wù)已經(jīng)通過攔截器開啟,因此在該層切換數(shù)據(jù)源是不行的,明白事務(wù)的原理是尤為重要的,我之前的文章中,將切換數(shù)據(jù)源的攔截器配置在了Dao層是有問題的(因?yàn)槭鞘纠?,所以粗心了,?duì)誤導(dǎo)了大家我表示道歉),但提供的思路是沒有問題的。
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ì)開啟一個(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?!綪S:使用Spring管理Hibernate時(shí),可以去掉hibernate.cfg.xml,而全部配置的Spring的配置文件里,即hibernateProperties。看個(gè)人喜好吧】
最后,Demo中簡(jiǎn)單集成了一些框架,方便大家拿來就用,算是送給大家的福利,關(guān)于那些框架的配置和技術(shù),這里就不再闡述了。想要了解的可以看一下地址:
spring多數(shù)據(jù)源配置:http://chabaoo.cn/article/102282.htm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java 正則表達(dá)式入門詳解(基礎(chǔ)進(jìn)階)
最近看到很多同學(xué)想要學(xué)習(xí)java正則表達(dá)式的一些知識(shí),那么腳本之家小編就為大家介紹一下,其實(shí)正則表達(dá)式實(shí)用性很強(qiáng),處理大幅文字的時(shí)候都需要用得到,語(yǔ)法也大同小異2017-10-10springboot實(shí)現(xiàn)rabbitmq消息確認(rèn)的示例代碼
RabbitMQ的消息確認(rèn)有兩種, 一種是消息發(fā)送確認(rèn),第二種是消費(fèi)接收確認(rèn),本文主要介紹了springboot實(shí)現(xiàn)rabbitmq消息確認(rèn)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09淺談java中為什么重寫equals后需要重寫hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫equals后需要重寫hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Spring如何替換掉默認(rèn)common-logging.jar
這篇文章主要介紹了Spring如何替換掉默認(rèn)common-logging.jar,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例
樂觀鎖是一種用于解決并發(fā)沖突的機(jī)制,在數(shù)據(jù)庫(kù)中用于保護(hù)數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明
EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡(jiǎn)單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Java實(shí)現(xiàn)對(duì)一行英文進(jìn)行單詞提取功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)一行英文進(jìn)行單詞提取功能,結(jié)合實(shí)例形式分析了java基于StringTokenizer類進(jìn)行字符串分割的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10詳解jeefast和Mybatis實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的問題
這篇文章主要介紹了詳解jeefast和Mybatis實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的問題,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10