改进架构,实现动态数据源,减少java维护
怎樣不用寫java代碼來完畢開發(fā)?
對于大部分的產(chǎn)品和項目來說。頁面變化是很頭痛的事情。每次小功能上線,新客戶到來,都須要進行定制改造,不斷的開發(fā)維護。每次開發(fā)一方面要修改頁面,一方面要修改server代碼,然后部署。而借助動態(tài)數(shù)據(jù)源。能夠不用開發(fā)后端應用,直接完畢功能開發(fā)。
新功能開發(fā)時,僅僅須要定義須要的數(shù)據(jù)格式和獲取方法,如通過xml上傳1個sql語句,系統(tǒng)依據(jù)sql語句自己主動提取數(shù)據(jù)并轉(zhuǎn)成通用的格式。開發(fā)過程中,后臺java開發(fā)部分僅僅是寫好sql而且上傳,這樣前臺通過某一個servlet能夠動態(tài)的讀取運行sql,并將結(jié)果依照json返給前端。以后全部的開發(fā)僅僅須要前端做ajax實現(xiàn)頁面就可以。
完整業(yè)務流程例如以下:
1. 用戶在前端操作,如須要讀取經(jīng)濟類圖書。
2. 前端js推斷是什么操作,然后發(fā)送ajax請求到:http://services.guzz.org/commonServlet?id=f2354239sfASASFASfasf6&catId=47&keyword=jingji.....
3. server端有一個類似dispatcher-servlet的東西(我們這兒的commonServlet)。攔截請求,依據(jù)id知道載入數(shù)據(jù)須要運行名稱為f2354239sfASASFASfasf6的sql文件。運行時須要參數(shù):catId=47和keyword=jingji
4. commonServlet從文件系統(tǒng)中讀取f2354239sfASASFASfasf6.xml文件(這個文件在一個隱藏的文件夾下。從瀏覽器是不能直接獲取到的。集群環(huán)境會存放在集中存儲上),解析sql以及對象映射ORM。
5. commonServlet打開數(shù)據(jù)庫連接,依據(jù)sql構(gòu)造查詢語句,將第一步傳入的參數(shù)所有作為命名參數(shù)傳給查詢語句,運行查詢。
6. commonServlet把查詢的ResultSet依據(jù)ORM轉(zhuǎn)成java類,再轉(zhuǎn)成json。返回前臺。
7. 前臺依據(jù)json構(gòu)造出頁面并展示。結(jié)束流程。
在整個過程中。有2個關鍵步驟,一是動態(tài)載入SQL并進行ORM映射,一是自己主動進行sql所須要參數(shù)的類型轉(zhuǎn)換和匹配。進行命名查詢。假設系統(tǒng)規(guī)模較大,還須要解決查詢時分庫分表的問題。對于這樣的sql使用方式,因為在系統(tǒng)上線時,并不知道以后會用哪些sql語句,我們稱作動態(tài)SQL。
實現(xiàn)方式:
步驟1. 實現(xiàn)servlet。定義一個普通的servlet,或者jsp,或者webwork/spring action,接收參數(shù),獲取到sql的id。以及全部傳入的參數(shù)。然后轉(zhuǎn)入處理類處理。處理完畢后,將返回結(jié)果轉(zhuǎn)成json返回前端。
步驟2. 實現(xiàn)動態(tài)SQL載入與查詢。處理類依據(jù)id載入sql并運行。返回數(shù)據(jù)庫查詢結(jié)果。guzz 1.2.8 beta2提供了動態(tài)SQL服務。依據(jù)此服務能夠直接實現(xiàn)此功能。
優(yōu)點:
實現(xiàn)以后。基本上后臺開發(fā)就會非常穩(wěn)定非常穩(wěn)定了,大部分的工作僅僅是前端做頁面。能夠大幅度的減少開發(fā)成本。提高開發(fā)進度。
上面的實現(xiàn)是以上傳文件來定義和管理sql,也能夠通過數(shù)據(jù)庫來管理。
這樣管理起來更加簡單。
假設使用guzz作為動態(tài)SQL提供者。能夠自己主動獲得命名查詢,類型自己主動匹配(轉(zhuǎn)成枚舉類型都能夠),分庫。自己主動分切表。自己定義屬性表等附加支持。
嘖嘖~~
總結(jié)
以上是生活随笔為你收集整理的改进架构,实现动态数据源,减少java维护的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读《嵌入式系统项目分析入门与实践》⑤
- 下一篇: 固定UILabel宽度分行显示