李鵬
(寧夏希望信息股份有限公司 寧夏回族自治區(qū)銀川市 750001)
隨著信息技術(shù)的快速發(fā)展,軟件系統(tǒng)的規(guī)模和復(fù)雜度也越來越高,特別是企業(yè)級(jí)應(yīng)用平臺(tái)的開發(fā),涉及到的知識(shí)和內(nèi)容非常廣泛。為了使程序員能夠集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì),降低軟件開發(fā)難度,將信息系統(tǒng)中一些基礎(chǔ)通用功能,比如:事物處理,安全性,數(shù)據(jù)流控制等都交給平臺(tái)框架處理,從而解決軟件開發(fā)中依賴復(fù)雜、編碼復(fù)雜、配置復(fù)雜、部署復(fù)雜、監(jiān)控復(fù)雜等難題。
平臺(tái)采用“強(qiáng)規(guī)范式編程”思想,高標(biāo)準(zhǔn)的設(shè)計(jì)和編碼規(guī)范、高標(biāo)準(zhǔn)配置的開發(fā)環(huán)境;平臺(tái)簡化程序依賴、簡化部署、簡化配置、提供通用組件,是一個(gè)綜合型框架,致力于J2EE應(yīng)用的各層的解決方案,且保持開放性。
平臺(tái)采用快速原型技術(shù),有利于在一個(gè)項(xiàng)目內(nèi)多人協(xié)同工作。重用代碼大大增加,提高軟件生產(chǎn)效率和質(zhì)量。代碼結(jié)構(gòu)的規(guī)范化,降低程序員之間溝通以及日后維護(hù)的成本。讓經(jīng)驗(yàn)豐富的開發(fā)人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層級(jí)的編程;參數(shù)化框架使得軟件的適應(yīng)性、靈活性增強(qiáng)。
權(quán)限管理包括:部門管理、用戶管理、角色管理、菜單管理、模塊管理、功能管理、操作管理、在線用戶。
權(quán)限管理做為一個(gè)可插拔的子平臺(tái)通過接口集成在開發(fā)平臺(tái)中,也就是說,權(quán)限管理子平臺(tái)不是必須的,當(dāng)開發(fā)平臺(tái)做為老舊系統(tǒng)的擴(kuò)展系統(tǒng)集成到老舊系統(tǒng)中時(shí),可去除權(quán)限管理子平臺(tái)而使用原老舊系統(tǒng)的權(quán)限管理。去除權(quán)限管理子平臺(tái)后,可被集成到原老舊系統(tǒng)中,這種可被集成的特性大大延長了老舊平臺(tái)的生命周期。
3.1.1 部門管理和用戶管理
部門為樹型結(jié)構(gòu),以樹型和子部門列表方式展現(xiàn),部門設(shè)置有順序、狀態(tài),可查看部門信息的詳細(xì)內(nèi)容,刪除為邏輯刪除;部門與用戶為一對(duì)多關(guān)系,可調(diào)整用戶的部門,可鎖定和邏輯刪除一個(gè)用戶,可給用戶重置密碼,可給用戶分配角色,也可對(duì)第三方應(yīng)用接入人員分配接口組權(quán)限。
3.1.2 角色管理
平臺(tái)采用RBAC(基于角色的訪問控制)方式控制權(quán)限。角色分成多組,每個(gè)角色可添加多個(gè)用戶,給角色分配可訪問的菜單及功能,還能給角色分配訪問數(shù)據(jù)的數(shù)據(jù)權(quán)限。
3.1.3 菜單管理和模塊管理
平臺(tái)增強(qiáng)的權(quán)限控制不僅前端控制(菜單、頁面、按鈕的顯示),而且每個(gè)操作后臺(tái)也做了權(quán)限控制及日志記錄,防范非法操作。菜單管理(及模塊管理)是權(quán)限管理的基礎(chǔ)部分。
3.1.4 功能管理和操作管理
平臺(tái)為了強(qiáng)化安全,細(xì)化了權(quán)限控制粒度,把權(quán)限控制做到了功能及操作的最細(xì)粒度。在角色分配功能中,雖然授權(quán)的是功能,真正后臺(tái)控制的是功能下的操作。
3.1.5 在線用戶
平臺(tái)加強(qiáng)了系統(tǒng)監(jiān)控和用戶監(jiān)控。在線用戶功能可顯示登錄歷史時(shí)長及以線用戶,也可以強(qiáng)制在線用戶下線。
圖1:多數(shù)據(jù)源讀寫分離示意圖
圖2:代碼生成流程
平臺(tái)管理有字典管理、參數(shù)管理、定時(shí)任務(wù)管理、任務(wù)歷史查詢、附件查詢、公告管理、(阿里云)短信管理、短信歷史查詢、服務(wù)監(jiān)控、服務(wù)器性能歷史、Druid監(jiān)控等。
3.2.1 字典管理
字典管理配置各模塊使用的字典項(xiàng)。字典與表字段強(qiáng)對(duì)應(yīng)。字典項(xiàng)給代碼生成工具提供靜態(tài)常量生成到模塊實(shí)體中;字典項(xiàng)前端選擇標(biāo)簽提供下拉列表選項(xiàng)。
3.2.2 參數(shù)管理
參數(shù)管理主要維護(hù)系統(tǒng)中所有配置參數(shù)。參數(shù)的新增由后臺(tái)代碼完成添加默認(rèn)值,由參數(shù)管理修改功能來改變默認(rèn)值。
3.2.3 分布式定時(shí)任務(wù)管理及運(yùn)行歷史
定時(shí)任務(wù)管理的底層由Quartz分布式定時(shí)任務(wù)組件完成,添加了管理界面和底層任務(wù)封裝,運(yùn)行期可掃描到所有的任務(wù)類方便維護(hù)。
3.2.4 附件管理
附件管理只完成附件查看、下載、刪除功能,新增和邏輯刪除功能由各業(yè)務(wù)模塊完成。附件管理給管理員提供一個(gè)處理附件的窗口。
3.2.5 公告管理
公告管理是管理員對(duì)所有在線用戶提供一些通知性的消息。當(dāng)有消息時(shí),在線用戶在訪問新頁面時(shí),會(huì)彈出提示消息。
3.2.6 短信管理、模板查詢及短信發(fā)送歷史短信管理提供管理員手動(dòng)發(fā)送短信的機(jī)制。對(duì)接受眾最多的阿里云短信服務(wù),還可以查看阿里云上設(shè)置的模板、簽名情況,還可以查看業(yè)務(wù)發(fā)送的短信歷史。
3.2.7 服務(wù)監(jiān)控
服務(wù)監(jiān)控提供了分布式服務(wù)的健康情況以及服務(wù)所在服務(wù)器的情況,監(jiān)控分布式服務(wù)狀況,記錄服務(wù)啟動(dòng)、停止等信息。
3.2.8 服務(wù)性能監(jiān)控
服務(wù)監(jiān)控的同時(shí),也記錄了服務(wù)器性能情況,給后續(xù)的服務(wù)器調(diào)優(yōu)工作提供數(shù)據(jù)依據(jù)。
3.2.9 Druid監(jiān)控
集成了Druid組件提供的性能監(jiān)控,全面監(jiān)控系統(tǒng)運(yùn)行期各種性能指數(shù),給排錯(cuò)、調(diào)優(yōu)提供詳細(xì)信息。
日志管理子平臺(tái)以接口方式集成到了開發(fā)平臺(tái),使用者可選擇是否使用。因?yàn)槿罩緮?shù)據(jù)量大,并且需要長久保存,每日備份數(shù)據(jù)量太大,所以使用者可選擇日志輸出的數(shù)據(jù)庫及制定與系統(tǒng)主體不同的備份策略。
日志管理包含登錄日志、操作日志、錯(cuò)誤日志。日志管理給項(xiàng)目審計(jì)工作提供支持,也是等級(jí)保護(hù)評(píng)測(cè)要求的基本內(nèi)容。
3.3.1 登錄日志
登錄日志記錄用戶詳細(xì)的登錄信息,提供給管理員或?qū)徲?jì)員做分析使用。
3.3.2 操作日志和錯(cuò)誤日志
操作日志查詢功能記錄詳細(xì)的操作信息,也記錄了操作過程中的異常信息,結(jié)合全局異常處理微框架,提供“可查詢的異?!惫δ堋i_發(fā)平臺(tái)提供透明的操作日志記錄和異常日志記錄,提升開發(fā)平臺(tái)的易用性。
平臺(tái)部署時(shí)是分布式無狀態(tài)結(jié)構(gòu),以Redis或數(shù)據(jù)庫保存會(huì)話狀態(tài),支持以子系統(tǒng)為單位的多數(shù)據(jù)源和讀寫分離,支持Web服務(wù)的動(dòng)態(tài)水平擴(kuò)展。
平臺(tái)本身是多數(shù)據(jù)源讀寫分離的環(huán)境,修改配置可為單數(shù)據(jù)庫讀寫同源,不僅可用于小應(yīng)用部署,更方便開發(fā)期使用,如圖1。
代碼生成工具以數(shù)據(jù)庫設(shè)計(jì)為驅(qū)動(dòng),動(dòng)態(tài)生成CRUD代碼,簡化開發(fā),如圖2。
代碼生成工具在平臺(tái)強(qiáng)規(guī)范的約束下,會(huì)覆蓋不可手動(dòng)修改的基礎(chǔ)代碼,對(duì)可修改的代碼給出參考代碼供其復(fù)制粘貼。
在線代碼生成工具設(shè)置好ID前輟和生成路徑,在運(yùn)行時(shí)直接把代碼生成到運(yùn)行環(huán)境中,重啟服務(wù)后就可以使用。
針對(duì)最易變的查詢條件更改,封裝查詢(框架通過反射機(jī)制自動(dòng)獲取查詢條件和類型)不僅能快速變更查詢條件,而且不需要修改類代碼。
封裝的查詢支持多種數(shù)據(jù)類型和查詢類型,如:eq、ne、ge、gt、le、lt、like、likeLeft、likeRight、notLike、in、notIn、orderBy等。
平臺(tái)使用OAuth2協(xié)議接入第三方應(yīng)用,同時(shí)平臺(tái)有被集成能力,可接入其他系統(tǒng)中。平臺(tái)的權(quán)限管理(部門、用戶、角色、模塊等)是與平臺(tái)主體脫耦的,去除權(quán)限管理后可被集成到其它有系統(tǒng)中。
文件存儲(chǔ)(附件、圖片等)是javaWeb系統(tǒng)不可或缺的一部分。分布式環(huán)境下的文件存儲(chǔ)一般借助于OSS這樣的文件系統(tǒng)。文件服務(wù)依靠自身來分布式文件存儲(chǔ),通過修改配置可動(dòng)態(tài)切換文件存儲(chǔ)的服務(wù),也可以單服務(wù)運(yùn)行,給中小微系統(tǒng)提供可擴(kuò)展支持。
單服務(wù)方式適用于小微應(yīng)用的部署。依賴少,完全掌握不受限;多服務(wù)方式適用于開發(fā)自測(cè),每個(gè)開發(fā)電腦都是一個(gè)服務(wù),完成分布式環(huán)境自測(cè);多服務(wù)方式適用于大中型應(yīng)用部署,依賴小,自控能力強(qiáng);單服務(wù)可調(diào)整配置轉(zhuǎn)變?yōu)榉植际椒绞?,?yīng)用擴(kuò)展只需要修改配置文件。
分布式監(jiān)控分為在線用戶監(jiān)控、服務(wù)監(jiān)控、服務(wù)器監(jiān)控。分布式環(huán)境下,用戶由負(fù)載均衡服務(wù)器分散在各服務(wù)上,在線用戶監(jiān)控可登錄任一服務(wù)監(jiān)控到所有用戶,并可查看用戶登錄歷史以及強(qiáng)制用戶下線。
在權(quán)限管理和在線API接口文檔的基礎(chǔ)上,集合兩者的優(yōu)點(diǎn),不添加額外服務(wù)及性能來提供系統(tǒng)對(duì)第三方接口的管理。
工作流是信息化平臺(tái)不可或缺的一部分,本開發(fā)平臺(tái)采用業(yè)務(wù)最常用的開源工作流Activity的升級(jí)版Flowable,版本為6.4.1。
工作流部分可分為流程設(shè)計(jì)、模型部署、任務(wù)待辦、任務(wù)已辦、流程業(yè)務(wù)、請(qǐng)假實(shí)例等。工作流的功能更多是提供給開發(fā)人員開發(fā)、調(diào)試、自測(cè)和二次開發(fā)使用,而非最終用戶使用。工作流子系統(tǒng)采用分庫、松耦合方式,提供了可調(diào)試的供二次開發(fā)使用的封裝。
即時(shí)通訊專為工作溝通定制。采用WebSocket技術(shù)及使用LayUI-LayMI組件,形式類似于QQ或微信,并嵌入了公司組織結(jié)構(gòu),使企業(yè)內(nèi)部溝通更容易。
3.14.1 國密加密集
開發(fā)平臺(tái)添加了國密SM2、SM3、SM4等加密工具類,還在此基礎(chǔ)上添加了加密版本號(hào)及限時(shí)策略,使加密工具也可以向下兼容式升級(jí)。
3.14.2 策略緩存
開發(fā)平臺(tái)采用組合式緩存;分布式環(huán)境下使用Redis緩存;單服務(wù)采用EhCache緩存;平臺(tái)自動(dòng)測(cè)試Redis,如果連接失敗則采用EhCache緩存。
3.14.3 動(dòng)態(tài)表名
以MyBatisPlus動(dòng)態(tài)表名功能為基礎(chǔ);實(shí)現(xiàn)動(dòng)態(tài)表名接口,添加表名轉(zhuǎn)換規(guī)則;由Spring的組件掃描注入方法注冊(cè)。
3.14.4 數(shù)據(jù)權(quán)限
數(shù)據(jù)權(quán)限以樹形部門結(jié)構(gòu)為基礎(chǔ);部門表添加部門編號(hào)和父部門編號(hào)字段來支持?jǐn)?shù)據(jù)權(quán)限的實(shí)現(xiàn);角色管理中添加給角色“數(shù)據(jù)權(quán)限”功能,權(quán)限范圍:僅本人、本部門、本部門及以下、自定義部門、全部;需要根據(jù)權(quán)限的業(yè)務(wù)表添加創(chuàng)建者ID、部門ID、部門編號(hào)、父部門串等字段。
3.14.5 選擇列導(dǎo)出
開發(fā)平臺(tái)采用了EasyPOI導(dǎo)入導(dǎo)出組件,添加了選擇列導(dǎo)出功能;開發(fā)平臺(tái)把選擇列導(dǎo)出功能集成到代碼生成工具中,成為基礎(chǔ)功能。
本文提出的基于SpringBoot快速開發(fā)平臺(tái)適用于各行業(yè)管理系統(tǒng)的快速搭建,對(duì)基于Web的應(yīng)用平臺(tái)開發(fā)具有先天的優(yōu)勢(shì)。開發(fā)人員無需掌握大量底層技術(shù)架構(gòu),大大減少項(xiàng)目開發(fā)工作量,縮短項(xiàng)目的實(shí)施周期,大幅提升交付率,節(jié)約了企業(yè)的研發(fā)成本和人力成本,使用平臺(tái)快速實(shí)現(xiàn)用戶需求。