亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring Boot讀寫分離架構的理財系統(tǒng)

        2022-11-28 07:19:40朱文杰姚雨晨伏勝洋
        關鍵詞:管理員代碼耦合

        朱文杰,姚雨晨,伏勝洋,汪 洋

        (1.湖北師范大學 計算機與信息工程學院,湖北 黃石 435000;2.華中師范大學 物理科學與技術學院,湖北 武漢 430000)

        1 開發(fā)背景

        近年來互聯(lián)網金融的發(fā)展迅猛,擬開發(fā)一個具有操作特色的理財系統(tǒng)。現有的理財系統(tǒng)多數基于C#[1]和Android[2,3]等開發(fā)技術,開發(fā)難度較大,并且在效率和易維護性上存在一定問題。本文針對傳統(tǒng)方案設計模式存在的問題及缺陷,設計并實現了一套以Spring Boot為框架的B/S快速設計系統(tǒng);為了實現該系統(tǒng)前后端分離,引入MVC進行設計,使用Spring Boot以及MyBatis框架進行項目編碼;其后端借助Spring Boot、MyBaits、MySQL[4,5]等服務平臺,在實現基本功能的前提下,使用page helper進行頁面操作,前臺使用模板語言thyme leaf,并配以使用Maven、MyBatis[6]等提供的技術優(yōu)勢,有效地降低了開發(fā)復雜度,實現資源橫向擴展、動態(tài)伸縮,快速響應外部需求的變化。此外,本系統(tǒng)還加入了個性化等設計,改善用戶體驗。

        2 開發(fā)技術

        Spring Boot是一個開源框架,其內部整合了眾多配置功能,可以利用其控制反轉、依賴注入以及切面編程的特性,實現通過簡單的配置較為迅速地搭建出應用開發(fā)平臺功能。同時,本理財系統(tǒng)通過合理的使用其注釋功能來簡化項目開發(fā)過程,以達到加快開發(fā)進程的目的。

        “高內聚,低耦合”是代碼編寫的目標,內聚和耦合都是一種度量[7~9]。內聚包括偶然內聚、邏輯內聚、時間內聚以及過程內聚等等,其是指模塊內各個部分之間的緊密程度,高內聚是指一個模塊由相關性較強的代碼組成且該模塊只實現一項功能。耦合包括無直接耦合、數據耦合、標記耦合以及控制耦合等等,其是指模塊之間的互連程度。與內聚不同,隨著系統(tǒng)代碼之間的耦合性的增強,系統(tǒng)各個功能模塊互相調用關系混亂不清,代碼的獨立性就會因此降低。為了避免此問題,本理財系統(tǒng)采用面向服務架構技術開發(fā)。

        面向服務架構SOA(Service-Oriented Architecture)是一種面向服務的、處理不同軟件之間數據交互的粗粒架構[10~12];其根據整體應用的不同功能進行拆分來得到多個功能塊,進而提供不同服務;服務之間通過協(xié)議進行聯(lián)系,每個服務之間的功能都是彼此獨立且可相互調用。為提高服務在不同系統(tǒng)中的適用性,我們在本理財系統(tǒng)中定義一個服務的接口或者協(xié)議時,往往采用能區(qū)分且用于實現服務系統(tǒng)的編程語言或者操作系統(tǒng),以此來實現服務的跨系統(tǒng)交互。

        讀寫分離(如圖1)用于解決數據庫的讀取性能限制,但并不是所有的讀性能受限制都是要用讀寫分離。對于大多數業(yè)務,多見讀寫不均的現象,主要是數據庫讀能力要比寫能力強很多,而往往寫數據庫能力是數據庫的瓶頸。本理財系統(tǒng)為了較大提升數據庫的寫性能,削弱讀寫沖突,提升數據庫寫入能力,就必須使用讀寫分離。

        圖1 讀寫分離適用場景

        3 系統(tǒng)需求分析、總體設計

        3.1 系統(tǒng)需求設計

        本系統(tǒng)實現功能:權限管理、用戶信息管理、理財產品管理等。用戶可以使用該系統(tǒng)進行理財產品的購買以及貸款申請,理財方式包括零錢理財、工資理財等,同時該系統(tǒng)也會給用戶更新理財產品信息。為滿足網站用戶的需求,系統(tǒng)管理者可以在管理端對用戶端的使用權限進行修改,同時對用戶端理財信息進行增刪改查。

        3.2 總體設計

        本系統(tǒng)分為管理端和用戶端,如圖2.

        1)用戶端則分為四個模塊:系統(tǒng)首頁、個人理財、金融工具、個人中心。系統(tǒng)首頁提供理財簡介以及理財書籍推薦。個人理財包括零錢理財、工資理財、期限理財、基金理財四種理財產品以及銀行推薦,用戶可以在此進行理財產品的購買。金融工具包括資金記錄和安全網貸,用戶可以通過資金記錄查找賬戶資金流向,同時可以通過安全網貸頁面進行網絡貸款。個人中心分為我的理財、我的借貸、銀行卡管理、賬戶安全。用戶可以通過我的理財界面進行對已購買理財產品的管理,在我的借貸界面進行還貸,賬戶安全頁面可以進行賬戶密碼的修改。

        2)管理員通過登錄管理賬戶對該理財系統(tǒng)進行管理。用戶信息管理界面分為用戶信息、銀行卡、個人征信三個部分,管理員可在此進行用戶信息以及征信管理。管理員可以在理財產品管理界面進行理財產品的管理以及銀行推薦信息的更新。權限管理部分可以進行用戶界面功能的修改以及管理員權限的設置。同時,對于用戶提交的網貸申請,管理員可以在網貸管理界面進行審核,除此之外,管理員可以在網貸信息界面進行系統(tǒng)用戶網貸信息的查看以及提醒還款操作。

        3.3 微服務在理財系統(tǒng)開發(fā)中的應用

        在本理財系統(tǒng)多功能模塊的搭建中,如果簡單地將以上功能模塊進行打包整合,形成一個巨大的服務單元,也稱為單體式應用[13,14]。雖然單體式應用在系統(tǒng)部署方面確實具有一定的優(yōu)勢,但是在系統(tǒng)不斷迭代升級后,其內部功能模塊關系會因此變得十分復雜,此時進行修改以及擴展是十分困難的。所以為了解決這一問題,引入微服務進行系統(tǒng)管理。

        微服務是SOA的細粒級組件[15~17],相比于SOA,微服務更加注重于輕量級服務,雖然微服務和SOA實現服務所用的技術不同,但兩者功能十分相似。對于一個SOA架構,我們可以將其拆分為松散耦合的微服務組件,這些微服務組件均可獨立部署且可實現和SOA相同的功能,如圖3.

        圖3 單體式應用以及微服務示意圖

        3.4 系統(tǒng)數據庫組織與讀寫分離的實現

        由于MySQL占用小且運行速度快,所以本理財系統(tǒng)采用MySQL用作數據庫,其為一種關系型的數據庫管理系統(tǒng)。選用MySQL可以將本理財系統(tǒng)的各類數據存放在不同的表中,如此可以使訪問速度提高。在實際使用過程發(fā)現直接在MySQL對數據進行操作較為麻煩,為了簡化數據庫管理,且綜合考慮便捷性以及成本,本系統(tǒng)采用Navicat對數據庫進行管理,即MySQL對系統(tǒng)的數據進行管理[18,19],而Navicat對MySQL進行管理。

        本理財系統(tǒng)創(chuàng)建19個數據庫表,各用于存儲管理員信息、管理員許可、銀行信息、銀行卡信息、零錢理財信息、資金記錄、基金理財信息、通知信息、貸款信息、理財新聞信息、用戶許可信息、期限理財信息等。以下列數據庫表(表1)為例:

        表1 數據庫設計表格

        在管理數據庫時,我們發(fā)現理財系統(tǒng)的數據庫在高并發(fā)寫入時,表現出較大的壓力。此時需要削弱讀寫沖突,以此提高數據庫寫能力。我們可以采用讀寫分離,將理財系統(tǒng)原本的數據庫分為主從庫,其中我們用主庫進行寫數據(增、刪、改),剩余的從庫用于讀數據(查),其中在主庫和多個從庫之間進行數據同步,如圖4.

        圖4 讀寫分離總體示意圖

        3.5 讀寫分離相關實現類

        實現 MySQL數據庫的動態(tài)讀寫分離,主要由以下幾個類實現:

        1) ResourceHandlers(ResourceHandlerRegistry registry) Springboot默認靜態(tài)資源訪問路徑,若靜態(tài)資源路徑不是在Springboot規(guī)定的靜態(tài)資源文件夾下面,則需要在下面添加映射路徑;

        public void ResourceHandlers(ResourceHandlerRegistry registry)

        {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

        registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/"); }

        2) determineTargetDataSource設置獲取數據源,determineCurrentLookupKey決定當前數據源的對應的key,

        DataSource determineTargetDataSource(){

        Object lookupKey=this. determineCurrentLookupkey();

        DataSource dataSource=(DataSource) this. resolvedDataSources. get(lookupkey); if(dataSource== null &&(this. lenientFallback II lookupkey ==null)){

        dataSource=this. resolvedDefaultDataSource;

        if(datasource ==nul1){throw new IllegalStateException("Cannot determine target Datasource for lookup key ["+lookupkey+"]");

        } else{return dataSource;}

        根據determineCurrentLookupKey獲取的key,在resolvedDataSources這個Map中查找對應的datasource。

        3) AfterPropertiesSet它在bean實例已經創(chuàng)建好,且屬性值和依賴的其他bean實例都已經注入以后執(zhí)行,也就是說調用,targetDataSources,defaultTargetDataSource的賦值一定要在afterPropertiesSet前邊執(zhí)行;

        Override public void AfterPropertiesset(){

        if(this. targetDatasourcesum null){

        this.resolvedDatasources = new HashMop(this.targetoatasources.size());for(Hap. Entry

        entry: this. targetDatasources. entryset()){

        object lookupkey=resolveSpecifiedLookupkey(entry. getkey());

        DataSource datasource resolvespecifiedDataSource(entry.getvalue()); this.resolvedDataSources.put(lookupkey, dataSource); }}

        4) DataSourceAOP實現AOP的前置通知,對所有返回值進行校驗以判別對數據庫是進行讀操作還是寫操作,使用request的getParameter方法,讓其在返回值的時候檢查提交方式;

        public void DataSourceAOP (ServletRequest request, ServletResponse response, FilterChain chain)

        throws IOException, ServletException {

        response.setCharacterEncoding(code);

        response.setContentType("text/html;charset=" + code);

        MyHttpServletRequest myRequest = new MyHttpServletRequest((HttpServletRequest));

        chain.doFilter(myRequest, response);}

        通過上面介紹的相關類,便可高效快捷實現本理財系統(tǒng)數據庫讀寫分離。此外,當用戶數量增多,遇到性能瓶頸時,這種結構便于進行多方面擴展,例如添加數據源、添加數據庫、負責均衡等,根據需求動態(tài)收縮,以實現系統(tǒng)升級迭代,實現示意圖如圖5所示:

        圖5 SpringBoot讀寫分離實現示意圖

        4 系統(tǒng)測試運行

        用戶在理財系統(tǒng)上的網頁請求會被控制器轉移給與之對應的模型進行處理,控制器只是選擇適當的模型進行處理,處理完成后控制器再調用相應的視圖來顯示返回的數據。當我們需要對理財系統(tǒng)的用戶體驗進行改進時,不需要再次進行邏輯的編寫,不需要再次編輯業(yè)務邏輯,以此減少項目編輯時長,提高項目開發(fā)的效率。

        4.1 登錄界面

        該部分主要通過Shiro框架來實現。為了系統(tǒng)用戶能順利登入本理財系統(tǒng)(如圖6),需要Shiro攔截器對URL進行攔截。Shiro Config配置首先設置安全管理器,再添加Shiro的內置過濾器并設置過濾器規(guī)則。在Realm可以增加驗證碼校驗,當驗證失敗時拋出異常,Shiro認為登錄失敗,則記錄異常信息并執(zhí)行登錄失敗邏輯。

        圖6 登錄界面

        4.2 系統(tǒng)首頁

        該部分通過控制器controller實現。其作用是先根據不同的用戶請求分配URL,再根據URL匹配不同的接收器,再分別進行處理,最后向用戶返回結果。本部分與數據庫匹配,管理員可以在數據庫中對該部分內容進行修改。

        系統(tǒng)首頁包含了理財系統(tǒng)的大部分功能模塊,如果在代碼編寫過程中不注意代碼結構,很容易引發(fā)高耦合。若此時不對代碼層進行調整,將會導致系統(tǒng)各功能模塊產生混亂。我們可以通過代碼解耦合來解決這一問題。

        首先,抽象系統(tǒng)模塊得到模塊以及類之間的關系,通過模塊依賴關系初步判斷是否需要進行解耦合,如果依賴關系混亂,再結合參考間接衡量標準進行綜合判斷,若代碼結構在可讀性以及可維護性確實存在缺陷,則需要進行解耦合。

        解耦合可分為三步,首先進行封裝,其次進行中間層處理,最后進行模塊化。常見的解耦合方式有以下幾種:

        Spring Aop(面向切片編程),主要實現業(yè)務代碼以及非業(yè)務代碼之間的解耦合。其中業(yè)務代碼指直接實現響應用戶需求的代碼,非業(yè)務代碼指脫離業(yè)務存在的代碼,也被稱之為輔助業(yè)務代碼。

        Ioc(控制反轉),主要實現服務創(chuàng)建者與服務對象之間的解耦。

        消息隊列,實現觀察者與被觀察者之間的解耦合。

        4.3 個人理財

        管理員可以通過理財產品管理界面(如圖7)進行系統(tǒng)理財產品的更新,通過Change Money Controller、Pay Money Controller、Term Financial Controller、Fund Product Controller、Bank Controller五個控制器來實現。使用Request Mapping來處理請求地址映射的注解,把WEB請求映射到相應的處理函數。Request Mapping的變體形式包括Get Mapping和Put Mapping,均用于向服務器提交信息。

        圖7 零錢理財界面

        4.4 金融工具

        金融工具頁面包括資金記錄和安全網貸。用戶可以在資金記錄界面(如圖8)查詢到賬戶資金的流向明細。該部分通過Recorder Controller控制器實現。為了跳轉到資金記錄界面,首先引入Page Helper插件,在查詢之前使用Start Page方法,來傳入頁碼以及每頁大小。再使用Page Info打包查詢后的結果,并移交給頁面進行下一步處理。

        圖8 資金記錄界面

        4.5 個人中心

        該部分由My Finance Controller、Loan Controller、Bank Card Controller、User Controller控制器實現,根據理財類別對用戶已購買的理財產品進行明細顯示(如圖9)。

        圖9 我的理財界面

        用戶輸入借貸金額以及借貸期限,即可進行貸款申請,管理員可以對申請進行審核。

        5 結語

        針對目前市面上理財系統(tǒng)存在的一些不足,分析并設計了一種讀寫分離的理財管理系統(tǒng)。系統(tǒng)開發(fā)基于SpringBoot微架構,其中Spring Boot使用Java構建微服務,利用Spring Boot + Mybatis框架搭建理財管理系統(tǒng),本文重點描述了微服務系統(tǒng)讀寫分離功能原理以及相關實現的過程,通過實際運行測試,系統(tǒng)穩(wěn)定性以及實用性符合設計要求,為理財新手提供一種更易上手的理財方式。

        Design and implementation of financial management system with read-write separation based on Spring Boot

        ZHU Wen-jie1,YAO Yu-chen1,FU Sheng-yang1,WANG Yang2

        猜你喜歡
        管理員代碼耦合
        非Lipschitz條件下超前帶跳倒向耦合隨機微分方程的Wong-Zakai逼近
        我是小小午餐管理員
        我是圖書管理員
        少先隊活動(2020年8期)2020-12-18 02:32:07
        我是圖書管理員
        少先隊活動(2020年7期)2020-12-18 01:48:39
        可疑的管理員
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        基于“殼-固”耦合方法模擬焊接裝配
        大型鑄鍛件(2015年5期)2015-12-16 11:43:20
        欧美亚洲一区二区三区| 亚洲AV永久无码精品表情包 | 四虎影视久久久免费观看 | 亚洲日本天堂| 视频精品亚洲一区二区| 亚洲中字永久一区二区三区| 中文字幕在线乱码一区| 国内精品久久久久伊人av| 熟妇丰满多毛的大隂户| 一本久道久久综合久久| 亚洲性爱区免费视频一区| 一本色道久久88加勒比综合| 国产激情久久久久影院小草| 亚洲日韩久久综合中文字幕| 成人无码视频| 亚洲熟女av超清一区二区三区| 亚洲精品久久久中文字| 女同在线网站免费观看| 精品日韩一级免费视频| 色偷偷av男人的天堂| 蜜臀av免费一区二区三区| 久久精品国产亚洲AV高清wy| 青青草成人免费在线观看视频| 中国少妇×xxxx性裸交| 欧美成人免费全部| 亚洲成人免费无码| 国产天堂av手机在线| 日韩极品视频免费观看| 精品成人av一区二区三区| 99精品免费视频| 日韩精品国产精品亚洲毛片| 激情综合五月| 久久国内精品自在自线图片| 国产精品九九热| 国产伦奸在线播放免费| 成人av片在线观看免费| 国产av电影区二区三区曰曰骚网| 中文字幕经典一区| av中文字幕在线资源网| 日本久久伊人特级黄色| 1区2区3区高清视频|