電 話:18937133779
網(wǎng) 址:http://www.tpiin.com
郵 箱:zboao@qq.com
SaaS服務(wù)模式管理系統(tǒng)的特性:
1、互聯(lián)網(wǎng)
SaaS服務(wù)通過互聯(lián)網(wǎng)瀏覽器或
WebServices/Web2.0程序連接的形式為用戶提供服務(wù),使得SaaS應(yīng)用具備了典型互聯(lián)網(wǎng)技術(shù)特點(diǎn);另一方面,由于SaaS極大的縮短了用戶與SaaS提供商之間的時(shí)空距離,從而使得SaaS服務(wù)的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
2、多租戶
SaaS服務(wù)通?;谝惶讟?biāo)準(zhǔn)軟件系統(tǒng)為成百上千的不同客戶(又稱租戶)
提供服務(wù)。這要求SaaS服務(wù)要能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個(gè)租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務(wù)邏輯、數(shù)據(jù)結(jié)構(gòu)等的個(gè)性化需求。
3、服務(wù)特性
SaaS使得軟件以互聯(lián)網(wǎng)為載體的服務(wù)形式被客戶使用,所以服務(wù)合約的簽定、服務(wù)使用的計(jì)量、在線服務(wù)質(zhì)量的保證、服務(wù)費(fèi)用的收取等等問題都必須考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
SaaS是Software-as-a-service(軟件即服務(wù))。SaaS在業(yè)內(nèi)的叫法是軟件運(yùn)營,或稱軟營。是一種基于互聯(lián)網(wǎng)提供軟件服務(wù)的應(yīng)用模式。一種隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用軟件的成熟,在21世紀(jì)開始興起的完全創(chuàng)新的軟件應(yīng)用模式,是軟件科技發(fā)展的最新趨勢。
SaaS即Software-as-a-Service(軟件即服務(wù))是隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用軟件的成熟, 在21世紀(jì)開始興起的一種完全創(chuàng)新的軟件應(yīng)用模式。
傳統(tǒng)模式下,廠商通過License將軟件產(chǎn)品部署到企業(yè)內(nèi)部多個(gè)客戶終端實(shí)現(xiàn)交付。SaaS定義了一種新的交付方式,也使得軟件進(jìn)一步回歸服務(wù)本質(zhì)。
企業(yè)部署信息化軟件的本質(zhì)是為了自身的運(yùn)營管理服務(wù),軟件的表象是一種業(yè)務(wù)流程的信息化,本質(zhì)還是第一種服務(wù)模式,SaaS改變了傳統(tǒng)軟件服務(wù)的提供方式,減少本地部署所需的大量前期投入,進(jìn)一步突出信息化軟件的服務(wù)屬性,或成為未來信息化軟件市場的主流交付模式。
互聯(lián)網(wǎng)特性及運(yùn)用
一方面,SaaS服務(wù)通過互聯(lián)網(wǎng)瀏覽器或WebServices/Web2.0程序連接的形式為用戶提供服務(wù),使得SaaS應(yīng)用具備了典型互聯(lián)網(wǎng)技術(shù)特點(diǎn);另一方面,由于SaaS極大地縮短了用戶與SaaS提供商之間的時(shí)空距離,從而使得SaaS服務(wù)的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
比如,SaaS軟件行業(yè)知名產(chǎn)品NetSuite所提供的在線ERP、在線CRM等模塊產(chǎn)品都是基于網(wǎng)絡(luò)的,這樣的優(yōu)勢在于不必投入任何硬件費(fèi)用,也不用請專業(yè)的系統(tǒng)維護(hù)人員就能上網(wǎng),有瀏覽器就可以進(jìn)行ERP、CRM系統(tǒng)的使用??焖俚膶?shí)施、便捷的使用、低廉的價(jià)格都有賴于SaaS產(chǎn)品的互聯(lián)網(wǎng)特性。
多重租賃(Multi-tenancy)特性
SaaS服務(wù)通常基于一套標(biāo)準(zhǔn)軟件系統(tǒng)為成百上千的不同客戶(又稱為租戶)提供服務(wù)。這要求SaaS服務(wù)能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個(gè)租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務(wù)邏輯、數(shù)據(jù)結(jié)構(gòu)等的個(gè)性化需求。由于SaaS同時(shí)支持多個(gè)租戶,每個(gè)租戶又有很多用戶,這對支撐軟件的基礎(chǔ)設(shè)施平臺的性能、穩(wěn)定性和擴(kuò)展性提出很大挑戰(zhàn)。SaaS作為一種基于互聯(lián)網(wǎng)的軟件交付模式,優(yōu)化軟件大規(guī)模應(yīng)用后的性能和運(yùn)營成本是架構(gòu)師的核心任務(wù)。
服務(wù)(Service)特性
SaaS使軟件以互聯(lián)網(wǎng)為載體的服務(wù)形式被客戶使用,所以很多服務(wù)合約的簽訂、服務(wù)使用的計(jì)量、在線服務(wù)質(zhì)量的保證和服務(wù)費(fèi)用的收取等問題都必須加以考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
可擴(kuò)展(Scalable)特性
可擴(kuò)展性意味著最大限度地提高系統(tǒng)的并發(fā)性,更有效地使用系統(tǒng)資源。比如應(yīng)用:優(yōu)化資源鎖的持久性,使用無狀態(tài)的進(jìn)程,使用資源池來共享線和數(shù)據(jù)庫連接等關(guān)鍵資源,緩存參考數(shù)據(jù),為大型數(shù)據(jù)庫分區(qū)。
SaaS是Software-as-a-Service(軟件即服務(wù))的簡稱。它是一種通過Internet提供軟件的模式,廠商將應(yīng)用軟件統(tǒng)一部署在自己的服務(wù)器上,客戶可以根據(jù)自己實(shí)際需求,通過互聯(lián)網(wǎng)向廠商定購所需的應(yīng)用軟件服務(wù),按定購的服務(wù)多少和時(shí)間長短向廠商支付費(fèi)用,并通過互聯(lián)網(wǎng)獲得廠商提供的服務(wù)。
對于廣大中小型企業(yè)來說,SaaS是采用先進(jìn)技術(shù)實(shí)施信息化的最好途徑。但SaaS絕不僅僅適用于中小型企業(yè),所有規(guī)模的企業(yè)都可以從SaaS中獲利。
SaaS的特性:
1、互聯(lián)網(wǎng)特性
一方面,SaaS服務(wù)通過互聯(lián)網(wǎng)瀏覽器或WebServices/Web2.0程序連接的形式為用戶提供服務(wù),使得SaaS應(yīng)用具備了典型互聯(lián)網(wǎng)技術(shù)特點(diǎn);另一方面,由于SaaS極大地縮短了用戶與SaaS提供商之間的時(shí)空距離,從而使得SaaS服務(wù)的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
比如,SaaS軟件行業(yè)知名產(chǎn)品NetSuite所提供的在線ERP、在線CRM等模塊產(chǎn)品都是基于網(wǎng)絡(luò)的,這樣的優(yōu)勢在于不必投入任何硬件費(fèi)用,也不用請專業(yè)的系統(tǒng)維護(hù)人員就能上網(wǎng),有瀏覽器就可以進(jìn)行ERP、CRM系統(tǒng)的使用??焖俚膶?shí)施、便捷的使用、低廉的價(jià)格都有賴于SaaS產(chǎn)品的互聯(lián)網(wǎng)特性。
2、多重租賃(Multi-tenancy)特性
SaaS服務(wù)通常基于一套標(biāo)準(zhǔn)軟件系統(tǒng)為成百上千的不同客戶(又稱為租戶)提供服務(wù)。這要求SaaS服務(wù)能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個(gè)租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務(wù)邏輯、數(shù)據(jù)結(jié)構(gòu)等的個(gè)性化需求。
由于SaaS同時(shí)支持多個(gè)租戶,每個(gè)租戶又有很多用戶,這對支撐軟件的基礎(chǔ)設(shè)施平臺的性能、穩(wěn)定性和擴(kuò)展性提出很大挑戰(zhàn)。SaaS作為一種基于互聯(lián)網(wǎng)的軟件交付模式,優(yōu)化軟件大規(guī)模應(yīng)用后的性能和運(yùn)營成本是架構(gòu)師的核心任務(wù)。
3、服務(wù)(Service)特性
SaaS使軟件以互聯(lián)網(wǎng)為載體的服務(wù)形式被客戶使用,所以很多服務(wù)合約的簽訂、服務(wù)使用的計(jì)量、在線服務(wù)質(zhì)量的保證和服務(wù)費(fèi)用的收取等問題都必須加以考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
4、可擴(kuò)展(Scalable)特性
可擴(kuò)展性意味著最大限度地提高系統(tǒng)的并發(fā)性,更有效地使用系統(tǒng)資源。比如應(yīng)用:優(yōu)化資源鎖的持久性,使用無狀態(tài)的進(jìn)程,使用資源池來共享線和數(shù)據(jù)庫連接等關(guān)鍵資源,緩存參考數(shù)據(jù),為大型數(shù)據(jù)庫分區(qū)。
以上內(nèi)容參考:百度百科——saas
期SAAS的優(yōu)勢越來越明顯使得SAAS的應(yīng)用越來越火,很多SAAS公司在創(chuàng)建企業(yè)級別的SAAS系統(tǒng),SAAS要實(shí)現(xiàn)它的優(yōu)勢就要在SAAS設(shè)計(jì)時(shí)做好注意事項(xiàng),避免為SAAS后期帶來麻煩。隨著企業(yè)的去求不斷增大SAAS的可擴(kuò)展性要強(qiáng),因此在SAAS在設(shè)計(jì)之初就要為后期的二次開發(fā)以及升級做好準(zhǔn)備。那么下面介紹下:SAAS設(shè)計(jì)有哪些注意事項(xiàng)呢?
SAAS設(shè)計(jì)采用分層設(shè)計(jì)
SAAS系統(tǒng)分層為租戶識別>應(yīng)用層>數(shù)據(jù)訪問層>緩存層>數(shù)據(jù)庫,一般的業(yè)務(wù)代碼寫在應(yīng)用層,租戶識別可以用SPRING攔截器通過THREADLOCAL傳遞給后端,數(shù)據(jù)庫、緩存層數(shù)據(jù)設(shè)置對于應(yīng)用層透明。程序員在寫代碼的時(shí)候只關(guān)心業(yè)務(wù)邏輯,不擔(dān)心多租戶的問題。
SAAS設(shè)計(jì)數(shù)據(jù)隔離要透明
在數(shù)據(jù)庫訪問層對SQL進(jìn)行改寫,在連接池根據(jù)TENATNCONTEXT改寫SQL這樣做好處是:程序員最多把系統(tǒng)搞DOWN了也不至于信息串了互相泄露;將來做分表分庫也很方便上層應(yīng)用不用修改。
SAAS設(shè)計(jì)租戶識別方案
通過URL識別租戶:系統(tǒng)給租戶生成一個(gè)隨機(jī)的三級域名,如果用戶想使用自己的域名,可以在CNAME到我們生成的三級域名,管理系統(tǒng)綁定的域名、登錄名判別租戶。
SAAS設(shè)計(jì)租戶管理系統(tǒng)
SAAS系統(tǒng)是必須考慮計(jì)費(fèi)系統(tǒng)和租戶控制系統(tǒng)。這個(gè)系統(tǒng)需要都是獨(dú)立設(shè)計(jì)。比如用戶選購的模塊、每月費(fèi)用、用戶可創(chuàng)建的用戶名數(shù)、計(jì)費(fèi)到期郵件提醒等功能。
SAAS設(shè)計(jì)定制化開發(fā)
SAAS的優(yōu)勢在于一套系統(tǒng)多人使用,定制化開發(fā)盡可能分系統(tǒng)、分模塊去做。然后通過控制臺中配置不同租戶訂購不同模塊并在前端頁面上顯示,不同的子系統(tǒng)需要分開部署,新功能盡量做的獨(dú)立可以配置。
SAAS設(shè)計(jì)灰度升級
SAAS付費(fèi)企業(yè)用戶對系統(tǒng)問題一般比較敏感,為了減少升級出現(xiàn)問題的影響范圍一般都采用灰度升級策略。
以上是對"SAAS設(shè)計(jì)有哪些注意事項(xiàng)"的介紹,SAAS設(shè)計(jì)為滿足一套系統(tǒng)多用戶應(yīng)用,且滿足每個(gè)用戶的個(gè)性化需求,時(shí)時(shí)提供SAAS系統(tǒng)新功能而進(jìn)行SAAS系統(tǒng)升級,SAAS系統(tǒng)升級時(shí)不影響用戶的正常使用,因此在做SAAS設(shè)計(jì)一定要做好以上注意事項(xiàng)。
SaaS,Software as a service,就是軟件即服務(wù)。
SaaS平臺就是為了解決特定行業(yè)或者企業(yè)特定問題而針對性開發(fā)的軟件系統(tǒng),比如快遞行業(yè)的物流管理系統(tǒng)、餐飲行業(yè)的點(diǎn)餐系統(tǒng)、超市的收銀系統(tǒng)、生產(chǎn)型企業(yè)的ERP系統(tǒng)、財(cái)務(wù)管理系統(tǒng)等。
企業(yè)機(jī)構(gòu)能通過SaaS進(jìn)行產(chǎn)品部署的優(yōu)勢:
1、降低企業(yè)研發(fā)及維護(hù)成本
通過SaaS進(jìn)行產(chǎn)品搭建,企業(yè)機(jī)構(gòu)不再需要購買任何硬件,只需要?jiǎng)傞_始的時(shí)候進(jìn)行簡單的注冊即可。企業(yè)無需再配備IT方面的專業(yè)技術(shù)人員,同時(shí)又能得到最新的技術(shù)應(yīng)用,滿足企業(yè)對信息管理的需求。
2、靈活可控的部署方案
通過SaaS技術(shù)服務(wù)來進(jìn)行產(chǎn)品部署,企業(yè)機(jī)構(gòu)可根據(jù)實(shí)際需求來靈活使用各種產(chǎn)品功能,并且這些功能全由技術(shù)服務(wù)商來進(jìn)行維護(hù)和更新,企業(yè)機(jī)構(gòu)無需擔(dān)憂其后續(xù)的更新優(yōu)化服務(wù)。
3、穩(wěn)定高效、安全有保障
在SaaS云計(jì)算服務(wù)模式中,企業(yè)數(shù)據(jù)主要存儲在SaaS供應(yīng)商的數(shù)據(jù)中心。因?yàn)橛屑夹g(shù)平臺集中統(tǒng)一的存儲、備份、防火墻、運(yùn)營監(jiān)控管理和專業(yè)強(qiáng)大的運(yùn)維團(tuán)隊(duì),企業(yè)的數(shù)據(jù)安全更有保障。
4、更優(yōu)質(zhì)的使用體驗(yàn)
與傳統(tǒng)的軟件外包不一樣的是,SaaS技術(shù)服務(wù)是一個(gè)持續(xù)提供優(yōu)質(zhì)體驗(yàn)的服務(wù)過程,旨在可以與客戶更進(jìn)一步的溝通交流,給予客戶更優(yōu)質(zhì)的使用體驗(yàn)。
1. 概述
筆者從2014年開始接觸SaaS(Software as a Service),即多租戶(或多承租)軟件應(yīng)用平臺;并一直從事相關(guān)領(lǐng)域的架構(gòu)設(shè)計(jì)及研發(fā)工作。機(jī)緣巧合,在筆者本科畢業(yè)設(shè)計(jì)時(shí)完成了一個(gè)基于SaaS的高效財(cái)務(wù)管理平臺的課題研究,從中收獲頗多。最早接觸SaaS時(shí),國內(nèi)相關(guān)資源匱乏,唯一有的參照資料是《互聯(lián)網(wǎng)時(shí)代的軟件革命:SaaS架構(gòu)設(shè)計(jì)》(葉偉等著)一書。最后課題的實(shí)現(xiàn)是基于OSGI(Open Service Gateway Initiative)Java動(dòng)態(tài)模塊化系統(tǒng)規(guī)范來實(shí)現(xiàn)的。
時(shí)至今日,五年的時(shí)間過去了,軟件開發(fā)的技術(shù)發(fā)生了巨大的改變,筆者所實(shí)現(xiàn)SaaS平臺的技術(shù)棧也更新了好幾波,真是印證了那就話:“山重水盡疑無路,柳暗花明又一村”。基于之前走過的許多彎路和踩過的坑,以及近段時(shí)間有許多網(wǎng)友問我如何使用Spring Boot實(shí)現(xiàn)多租戶系統(tǒng),決定寫一篇文章聊一聊關(guān)于SaaS的硬核技術(shù)。
說起SaaS,它只是一種軟件架構(gòu),并沒有多少神秘的東西,也不是什么很難的系統(tǒng),我個(gè)人的感覺,SaaS平臺的難度在于商業(yè)上的運(yùn)營,而非技術(shù)上的實(shí)現(xiàn)。就技術(shù)上來說,SaaS是這樣一種架構(gòu)模式:它讓多個(gè)不同環(huán)境的用戶使用同一套應(yīng)用程序,且保證用戶之間的數(shù)據(jù)相互隔離?,F(xiàn)在想想看,這也有點(diǎn)共享經(jīng)濟(jì)的味道在里面。
筆者在這里就不再深入聊SaaS軟件成熟度模型和數(shù)據(jù)隔離方案對比的事情了。今天要聊的是使用Spring Boot快速構(gòu)建獨(dú)立數(shù)據(jù)庫/共享數(shù)據(jù)庫獨(dú)立Schema的多租戶系統(tǒng)。我將提供一個(gè)SaaS系統(tǒng)最核心的技術(shù)實(shí)現(xiàn),而其他的部分有興趣的朋友可以在此基礎(chǔ)上自行擴(kuò)展。
2. 嘗試了解多租戶的應(yīng)用場景
假設(shè)我們需要開發(fā)一個(gè)應(yīng)用程序,并且希望將同一個(gè)應(yīng)用程序銷售給N家客戶使用。在常規(guī)情況下,我們需要為此創(chuàng)建N個(gè)Web服務(wù)器(Tomcat),N個(gè)數(shù)據(jù)庫(DB),并為N個(gè)客戶部署相同的應(yīng)用程序N次。現(xiàn)在,如果我們的應(yīng)用程序進(jìn)行了升級或者做了其他任何的改動(dòng),那么我們就需要更新N個(gè)應(yīng)用程序同時(shí)還需要維護(hù)N臺服務(wù)器。接下來,如果業(yè)務(wù)開始增長,客戶由原來的N個(gè)變成了現(xiàn)在的N+M個(gè),我們將面臨N個(gè)應(yīng)用程序和M個(gè)應(yīng)用程序版本維護(hù),設(shè)備維護(hù)以及成本控制的問題。運(yùn)維幾乎要哭死在機(jī)房了…
為了解決上述的問題,我們可以開發(fā)多租戶應(yīng)用程序,我們可以根據(jù)當(dāng)前用戶是誰,從而選擇對應(yīng)的數(shù)據(jù)庫。例如,當(dāng)請求來自A公司的用戶時(shí),應(yīng)用程序就連接A公司的數(shù)據(jù)庫,當(dāng)請求來自B公司的用戶時(shí),自動(dòng)將數(shù)據(jù)庫切換到B公司數(shù)據(jù)庫,以此類推。從理論上將沒有什么問題,但我們?nèi)绻紤]將現(xiàn)有的應(yīng)用程序改造成SaaS模式,我們將遇到第一個(gè)問題:如果識別請求來自哪一個(gè)租戶?如何自動(dòng)切換數(shù)據(jù)源?
3. 維護(hù)、識別和路由租戶數(shù)據(jù)源
我們可以提供一個(gè)獨(dú)立的庫來存放租戶信息,如數(shù)據(jù)庫名稱、鏈接地址、用戶名、密碼等,這可以統(tǒng)一的解決租戶信息維護(hù)的問題。租戶的識別和路由有很多種方法可以解決,下面列舉幾個(gè)常用的方式:
解決了上述問題后,我們再來看看如何獲取客戶端傳入的租戶信息,以及在我們的業(yè)務(wù)代碼中如何使用租戶信息(最關(guān)鍵的是DataSources的問題)。
我們都知道,在啟動(dòng)Spring Boot應(yīng)用程序之前,就需要為其提供有關(guān)數(shù)據(jù)源的配置信息(有使用到數(shù)據(jù)庫的情況下),按照一開始的需求,有N個(gè)客戶需要使用我們的應(yīng)用程序,我們就需要提前配置好N個(gè)數(shù)據(jù)源(多數(shù)據(jù)源),如果N<50,我認(rèn)為我還能忍受,如果更多,這樣顯然是無法接受的。為了解決這一問題,我們需要借助Hibernate 5提供的動(dòng)態(tài)數(shù)據(jù)源特性,讓我們的應(yīng)用程序具備動(dòng)態(tài)配置客戶端數(shù)據(jù)源的能力。簡單來說,當(dāng)用戶請求系統(tǒng)資源時(shí),我們將用戶提供的租戶信息(tenantId)存放在ThreadLoacal中,緊接著獲取TheadLocal中的租戶信息,并根據(jù)此信息查詢單獨(dú)的租戶庫,獲取當(dāng)前租戶的數(shù)據(jù)配置信息,然后借助Hibernate動(dòng)態(tài)配置數(shù)據(jù)源的能力,為當(dāng)前請求設(shè)置數(shù)據(jù)源,最后之前用戶的請求。這樣我們就只需要在應(yīng)用程序中維護(hù)一份數(shù)據(jù)源配置信息(租戶數(shù)據(jù)庫配置庫),其余的數(shù)據(jù)源動(dòng)態(tài)查詢配置。接下來,我們將快速的演示這一功能。
4. 項(xiàng)目構(gòu)建
我們將使用Spring Boot 2.1.5版本來實(shí)現(xiàn)這一演示項(xiàng)目,首先你需要在Maven配置文件中加入如下的一些配置:
然后提供一個(gè)可用的配置文件,并加入如下的內(nèi)容:
接下來,我們需要關(guān)閉Spring Boot自動(dòng)配置數(shù)據(jù)源的功能,在項(xiàng)目主類上添加如下的設(shè)置:
最后,讓我們看看整個(gè)項(xiàng)目的結(jié)構(gòu):
5. 實(shí)現(xiàn)租戶數(shù)據(jù)源查詢模塊
我們將定義一個(gè)實(shí)體類存放租戶數(shù)據(jù)源信息,它包含了租戶名,數(shù)據(jù)庫連接地址,用戶名和密碼等信息,其代碼如下:
持久層我們將繼承JpaRepository接口,快速實(shí)現(xiàn)對數(shù)據(jù)源的CURD操作,同時(shí)提供了一個(gè)通過租戶名查找租戶數(shù)據(jù)源的接口,其代碼如下:
業(yè)務(wù)層提供通過租戶名獲取租戶數(shù)據(jù)源信息的服務(wù)(其余的服務(wù)各位可自行添加):
接下來是配置自定義的數(shù)據(jù)源,其源碼如下:
在改配置類中,我們主要提供包掃描路徑,實(shí)體管理工程,事務(wù)管理器和數(shù)據(jù)源配置參數(shù)的配置。
6. 實(shí)現(xiàn)租戶業(yè)務(wù)模塊
在此小節(jié)中,租戶業(yè)務(wù)模塊我們僅提供一個(gè)用戶登錄的場景來演示SaaS的功能。其實(shí)體層、業(yè)務(wù)層和持久化層根普通的Spring Boot Web項(xiàng)目沒有什么區(qū)別,你甚至感覺不到它是一個(gè)SaaS應(yīng)用程序的代碼。
首先,創(chuàng)建一個(gè)用戶實(shí)體User,其源碼如下:
業(yè)務(wù)層提供了一個(gè)根據(jù)用戶名檢索用戶信息的服務(wù),它將調(diào)用持久層的方法根據(jù)用戶名對租戶的用戶表進(jìn)行檢索,如果找到滿足條件的用戶記錄,則返回用戶信息,如果沒有找到,則返回null;持久層和業(yè)務(wù)層的源碼分別如下:
7. 配置攔截器
我們需要提供一個(gè)租戶信息的攔截器,用以獲取租戶標(biāo)識符,其源代碼和配置攔截器的源代碼如下:
8. 維護(hù)租戶標(biāo)識信息
在這里,我們使用ThreadLocal來存放租戶標(biāo)識信息,為動(dòng)態(tài)設(shè)置數(shù)據(jù)源提供數(shù)據(jù)支持,該類提供了設(shè)置租戶標(biāo)識、獲取租戶標(biāo)識以及清除租戶標(biāo)識三個(gè)靜態(tài)方法。其源碼如下:
9. 動(dòng)態(tài)數(shù)據(jù)源切換
要實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換,我們需要借助兩個(gè)類來完成,CurrentTenantIdentifierResolver和AbstractDataSourceBasedMultiTenantConnectionProviderImpl。從它們的命名上就可以看出,一個(gè)負(fù)責(zé)解析租戶標(biāo)識,一個(gè)負(fù)責(zé)提供租戶標(biāo)識對應(yīng)的租戶數(shù)據(jù)源信息。
首先,我們需要實(shí)現(xiàn)CurrentTenantIdentifierResolver接口中的resolveCurrentTenantIdentifier()和validateExistingCurrentSessions()方法,完成租戶標(biāo)識的解析功能。實(shí)現(xiàn)類的源碼如下:
有了租戶標(biāo)識符解析類之后,我們需要擴(kuò)展租戶數(shù)據(jù)源提供類,實(shí)現(xiàn)從數(shù)據(jù)庫動(dòng)態(tài)查詢租戶數(shù)據(jù)源信息,其源碼如下:
最后,我們還需要提供租戶業(yè)務(wù)模塊數(shù)據(jù)源配置,這是整個(gè)項(xiàng)目核心的地方,其代碼如下:
10. 應(yīng)用測試
最后,我們通過一個(gè)簡單的登錄案例來測試本次課程中的SaaS應(yīng)用程序,為此,需要提供一個(gè)Controller用于處理用戶登錄邏輯。在本案例中,沒有嚴(yán)格的對用戶密碼進(jìn)行加密,而是使用明文進(jìn)行比對,也沒有提供任何的權(quán)限認(rèn)證框架,知識單純的驗(yàn)證SaaS的基本特性是否具備。登錄控制器代碼如下:
在啟動(dòng)項(xiàng)目之前,我們需要為主數(shù)據(jù)源創(chuàng)建對應(yīng)的數(shù)據(jù)庫和數(shù)據(jù)表,用于存放租戶數(shù)據(jù)源信息,同時(shí)還需要提供一個(gè)租戶業(yè)務(wù)模塊數(shù)據(jù)庫和數(shù)據(jù)表,用來存放租戶業(yè)務(wù)數(shù)據(jù)。一切準(zhǔn)備就緒后,啟動(dòng)項(xiàng)目,在瀏覽器中輸入:
在登錄窗口中輸入對應(yīng)的租戶名,用戶名和密碼,測試是否能夠正常到達(dá)主頁??梢远嘣黾訋讉€(gè)租戶和用戶,測試用戶是否正常切換到對應(yīng)的租戶下。
總結(jié)
(全國總部)河南省鄭州市金水區(qū)博雅廣場4號樓1104
+18937133779
zboao@qq.com
中博奧技術(shù)有限公司& 版權(quán)所有
工信部備案號:豫ICP備11015869號-8