李鵬
(寧夏希望信息股份有限公司 寧夏回族自治區銀川市 750001)
隨著信息技術的快速發展,軟件系統的規模和復雜度也越來越高,特別是企業級應用平臺的開發,涉及到的知識和內容非常廣泛。為了使程序員能夠集中精力完成系統的業務邏輯設計,降低軟件開發難度,將信息系統中一些基礎通用功能,比如:事物處理,安全性,數據流控制等都交給平臺框架處理,從而解決軟件開發中依賴復雜、編碼復雜、配置復雜、部署復雜、監控復雜等難題。
平臺采用“強規范式編程”思想,高標準的設計和編碼規范、高標準配置的開發環境;平臺簡化程序依賴、簡化部署、簡化配置、提供通用組件,是一個綜合型框架,致力于J2EE應用的各層的解決方案,且保持開放性。
平臺采用快速原型技術,有利于在一個項目內多人協同工作。重用代碼大大增加,提高軟件生產效率和質量。代碼結構的規范化,降低程序員之間溝通以及日后維護的成本。讓經驗豐富的開發人員去設計框架和領域構件,而不必限于低層級的編程;參數化框架使得軟件的適應性、靈活性增強。
權限管理包括:部門管理、用戶管理、角色管理、菜單管理、模塊管理、功能管理、操作管理、在線用戶。
權限管理做為一個可插拔的子平臺通過接口集成在開發平臺中,也就是說,權限管理子平臺不是必須的,當開發平臺做為老舊系統的擴展系統集成到老舊系統中時,可去除權限管理子平臺而使用原老舊系統的權限管理。去除權限管理子平臺后,可被集成到原老舊系統中,這種可被集成的特性大大延長了老舊平臺的生命周期。
3.1.1 部門管理和用戶管理
部門為樹型結構,以樹型和子部門列表方式展現,部門設置有順序、狀態,可查看部門信息的詳細內容,刪除為邏輯刪除;部門與用戶為一對多關系,可調整用戶的部門,可鎖定和邏輯刪除一個用戶,可給用戶重置密碼,可給用戶分配角色,也可對第三方應用接入人員分配接口組權限。
3.1.2 角色管理
平臺采用RBAC(基于角色的訪問控制)方式控制權限。角色分成多組,每個角色可添加多個用戶,給角色分配可訪問的菜單及功能,還能給角色分配訪問數據的數據權限。
3.1.3 菜單管理和模塊管理
平臺增強的權限控制不僅前端控制(菜單、頁面、按鈕的顯示),而且每個操作后臺也做了權限控制及日志記錄,防范非法操作。菜單管理(及模塊管理)是權限管理的基礎部分。
3.1.4 功能管理和操作管理
平臺為了強化安全,細化了權限控制粒度,把權限控制做到了功能及操作的最細粒度。在角色分配功能中,雖然授權的是功能,真正后臺控制的是功能下的操作。
3.1.5 在線用戶
平臺加強了系統監控和用戶監控。在線用戶功能可顯示登錄歷史時長及以線用戶,也可以強制在線用戶下線。

圖1:多數據源讀寫分離示意圖

圖2:代碼生成流程
平臺管理有字典管理、參數管理、定時任務管理、任務歷史查詢、附件查詢、公告管理、(阿里云)短信管理、短信歷史查詢、服務監控、服務器性能歷史、Druid監控等。
3.2.1 字典管理
字典管理配置各模塊使用的字典項。字典與表字段強對應。字典項給代碼生成工具提供靜態常量生成到模塊實體中;字典項前端選擇標簽提供下拉列表選項。
3.2.2 參數管理
參數管理主要維護系統中所有配置參數。參數的新增由后臺代碼完成添加默認值,由參數管理修改功能來改變默認值。
3.2.3 分布式定時任務管理及運行歷史
定時任務管理的底層由Quartz分布式定時任務組件完成,添加了管理界面和底層任務封裝,運行期可掃描到所有的任務類方便維護。
3.2.4 附件管理
附件管理只完成附件查看、下載、刪除功能,新增和邏輯刪除功能由各業務模塊完成。附件管理給管理員提供一個處理附件的窗口。
3.2.5 公告管理
公告管理是管理員對所有在線用戶提供一些通知性的消息。當有消息時,在線用戶在訪問新頁面時,會彈出提示消息。
3.2.6 短信管理、模板查詢及短信發送歷史短信管理提供管理員手動發送短信的機制。對接受眾最多的阿里云短信服務,還可以查看阿里云上設置的模板、簽名情況,還可以查看業務發送的短信歷史。
3.2.7 服務監控
服務監控提供了分布式服務的健康情況以及服務所在服務器的情況,監控分布式服務狀況,記錄服務啟動、停止等信息。
3.2.8 服務性能監控
服務監控的同時,也記錄了服務器性能情況,給后續的服務器調優工作提供數據依據。
3.2.9 Druid監控
集成了Druid組件提供的性能監控,全面監控系統運行期各種性能指數,給排錯、調優提供詳細信息。
日志管理子平臺以接口方式集成到了開發平臺,使用者可選擇是否使用。因為日志數據量大,并且需要長久保存,每日備份數據量太大,所以使用者可選擇日志輸出的數據庫及制定與系統主體不同的備份策略。
日志管理包含登錄日志、操作日志、錯誤日志。日志管理給項目審計工作提供支持,也是等級保護評測要求的基本內容。
3.3.1 登錄日志
登錄日志記錄用戶詳細的登錄信息,提供給管理員或審計員做分析使用。
3.3.2 操作日志和錯誤日志
操作日志查詢功能記錄詳細的操作信息,也記錄了操作過程中的異常信息,結合全局異常處理微框架,提供“可查詢的異常”功能。開發平臺提供透明的操作日志記錄和異常日志記錄,提升開發平臺的易用性。
平臺部署時是分布式無狀態結構,以Redis或數據庫保存會話狀態,支持以子系統為單位的多數據源和讀寫分離,支持Web服務的動態水平擴展。
平臺本身是多數據源讀寫分離的環境,修改配置可為單數據庫讀寫同源,不僅可用于小應用部署,更方便開發期使用,如圖1。
代碼生成工具以數據庫設計為驅動,動態生成CRUD代碼,簡化開發,如圖2。
代碼生成工具在平臺強規范的約束下,會覆蓋不可手動修改的基礎代碼,對可修改的代碼給出參考代碼供其復制粘貼。
在線代碼生成工具設置好ID前輟和生成路徑,在運行時直接把代碼生成到運行環境中,重啟服務后就可以使用。
針對最易變的查詢條件更改,封裝查詢(框架通過反射機制自動獲取查詢條件和類型)不僅能快速變更查詢條件,而且不需要修改類代碼。
封裝的查詢支持多種數據類型和查詢類型,如:eq、ne、ge、gt、le、lt、like、likeLeft、likeRight、notLike、in、notIn、orderBy等。
平臺使用OAuth2協議接入第三方應用,同時平臺有被集成能力,可接入其他系統中。平臺的權限管理(部門、用戶、角色、模塊等)是與平臺主體脫耦的,去除權限管理后可被集成到其它有系統中。
文件存儲(附件、圖片等)是javaWeb系統不可或缺的一部分。分布式環境下的文件存儲一般借助于OSS這樣的文件系統。文件服務依靠自身來分布式文件存儲,通過修改配置可動態切換文件存儲的服務,也可以單服務運行,給中小微系統提供可擴展支持。
單服務方式適用于小微應用的部署。依賴少,完全掌握不受限;多服務方式適用于開發自測,每個開發電腦都是一個服務,完成分布式環境自測;多服務方式適用于大中型應用部署,依賴小,自控能力強;單服務可調整配置轉變為分布式方式,應用擴展只需要修改配置文件。
分布式監控分為在線用戶監控、服務監控、服務器監控。分布式環境下,用戶由負載均衡服務器分散在各服務上,在線用戶監控可登錄任一服務監控到所有用戶,并可查看用戶登錄歷史以及強制用戶下線。
在權限管理和在線API接口文檔的基礎上,集合兩者的優點,不添加額外服務及性能來提供系統對第三方接口的管理。
工作流是信息化平臺不可或缺的一部分,本開發平臺采用業務最常用的開源工作流Activity的升級版Flowable,版本為6.4.1。
工作流部分可分為流程設計、模型部署、任務待辦、任務已辦、流程業務、請假實例等。工作流的功能更多是提供給開發人員開發、調試、自測和二次開發使用,而非最終用戶使用。工作流子系統采用分庫、松耦合方式,提供了可調試的供二次開發使用的封裝。
即時通訊專為工作溝通定制。采用WebSocket技術及使用LayUI-LayMI組件,形式類似于QQ或微信,并嵌入了公司組織結構,使企業內部溝通更容易。
3.14.1 國密加密集
開發平臺添加了國密SM2、SM3、SM4等加密工具類,還在此基礎上添加了加密版本號及限時策略,使加密工具也可以向下兼容式升級。
3.14.2 策略緩存
開發平臺采用組合式緩存;分布式環境下使用Redis緩存;單服務采用EhCache緩存;平臺自動測試Redis,如果連接失敗則采用EhCache緩存。
3.14.3 動態表名
以MyBatisPlus動態表名功能為基礎;實現動態表名接口,添加表名轉換規則;由Spring的組件掃描注入方法注冊。
3.14.4 數據權限
數據權限以樹形部門結構為基礎;部門表添加部門編號和父部門編號字段來支持數據權限的實現;角色管理中添加給角色“數據權限”功能,權限范圍:僅本人、本部門、本部門及以下、自定義部門、全部;需要根據權限的業務表添加創建者ID、部門ID、部門編號、父部門串等字段。
3.14.5 選擇列導出
開發平臺采用了EasyPOI導入導出組件,添加了選擇列導出功能;開發平臺把選擇列導出功能集成到代碼生成工具中,成為基礎功能。
本文提出的基于SpringBoot快速開發平臺適用于各行業管理系統的快速搭建,對基于Web的應用平臺開發具有先天的優勢。開發人員無需掌握大量底層技術架構,大大減少項目開發工作量,縮短項目的實施周期,大幅提升交付率,節約了企業的研發成本和人力成本,使用平臺快速實現用戶需求。