999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SpringBoot的GIS可視化系統的設計與構建

2024-06-16 12:30:57陳剛
電腦知識與技術 2024年12期

陳剛

關鍵詞:SpringBoot;Java反射解耦;Python模型;Mars3D框架;Ajax異步通信

0 引言

現狀:目前,全國各地水庫系統的信息化程度參差不齊,盡管所有系統的安全級別均較高,且必須在獲得授權的情況下離線完成系統部署,甚至不允許隨意調試。一些水庫的數據存儲在基于XML格式的古老WebService中,而另一些則建立了數據中心平臺,需要通過調用平臺API來獲取數據。還有的水庫引入了Kafka技術,須建立Kafka消費端以獲取數據。因此,不同的生產環境對開發的需求各異,這部分開發要求能獨立于整個項目之外,同時又能與原有項目互相整合調用,這就要求設計出一個低耦合的系統調用架構,以實現在不同生產環境下的開發。

已有項目:現存的已有項目采用了SpringBoot+MySQL+JPA+Thymeleaf+Bootstrap的技術選型,這是一個前后端不分離的項目,要求在此基礎上擴展功能以適配不同的水庫生產環境。這個前提使得項目不能重新開始,需要在原有項目中進行拆解和分割,既要保證開發進度,又能將功能模塊獨立出來,這是一個關鍵點。需求:新的需求要求能夠在任意生產環境下獲取水庫數據;新增GIS可視化系統;新增新水庫的AI模型(Python程序)。

難點及關鍵技術:

1) Java調用獨立jar包,以實現數據的抽取并持久化到數據庫。

2) Java調用Python編寫的模型算法,以獲得結果并繪制可視化圖形。

3) 將基于Vue 的Mars3D 開源GIS 框架整合到SpringBoot中。

1 開發框架簡介

SpringBoot:SpringBoot 是一種后端框架,它采用特定的配置方式,并通過內嵌的Tomcat服務器,直接將項目打包成jar 包,從而簡化項目的部署工作[1]。SpringBoot框架采用MVC三層結構,其中MVC包括3 個模塊:模型層(Model) 、視圖層(View) 、控制層(Con?troller) [2]。此外,通過配置Maven工具來管理大量的項目資源,可以有效解決項目資源管理的問題。

Thymeleaf:Thymeleaf 是一個面向Web 服務器端的現代化Java模板引擎。與傳統的Java模板引擎不同,Thymeleaf可以直接被瀏覽器加載,以展示靜態頁面效果。當通過Web應用程序訪問時,Thymeleaf會根據對應的標簽屬性進行動態渲染。SpringBoot推薦使用Thymeleaf作為模板引擎[3]。

Python:Python是一種面向對象的解釋型語言,具有動態數據類型特性。它是一種高級通用編程語言,相比其他語言,Python更便于實現原型開發。

Vue3:Vue是一款由國內開發者尤雨溪研發的用于搭建用戶界面的框架。Vue采用自底向上增量開發的設計方式,提供了豐富的組件庫,支持獨立開發。結合使用Vue生態系統支持的庫和單文件組件,Vue 可以為復雜的單頁應用程序提供支持[4]。此外,通過Vue,前端更便于調用第三方工具(如Web API) 。

此外,開發過程中還使用到了MySQL、SpringData JPA、Bootstrap、WebService、PostgreSQL等技術。

2 技術選型

本次項目開發采用前后端一體化開發,并配合使用Ajax 技術,其技術選型包括:SpringBoot、MySQL、Spring Data JPA、Thymeleaf、Bootstrap、Vue和Mars3D。

2.1 為什么不選擇前后端分離

2.1.1 基于舊項目上新增功能

選擇前后端分離的優勢在于前后端可以相互獨立開發,只需要在接口規范上做到統一就可以加速開發過程。然而,這種方式適合新項目的全新設計,不適合舊項目的改造。在現有的前后端不分離的項目中增加新功能時,既要保證開發進度,又要做到盡可能低耦合的設計。在代碼重構的環節,應該采用敏捷開發的思路,逐漸向解耦的方向演化。

2.1.2 服務器資源限制

服務器的資源分配是按照單個項目進行的,如果改為前后端分離,就需要在原有MySQL服務和Spring?Boot服務的基礎上開啟NginX長期服務。

2.1.3 項目進度約束

項目進度是一個重要的限制因素。從前后端不分離的模式轉變為分離模式,將涉及整個設計的變動和大量的代碼修改,這可能導致項目完成的預期時間難以預測。

2.2 為什么不使用Python+Flask 選型

與上述2.1.2點類似,盡管Python+Flask能獨立啟動Web服務并長期占用Web資源,但實際上調用模型算法的頻率較低,多數情況下是按需調用。因此,為了優化資源利用,選擇按需調用而非常駐Web服務的方案。

2.3 為什么要調用獨立Jar 實現數據抽取

鑒于不同水庫的信息化程度各不相同,數據存儲方式也有所差異,因此面對不同的水庫需要進行單獨開發。這種開發方式不會影響原有項目,相對較為獨立。因此,可以采用獨立的jar程序來獲取數據,并將其存儲在原有項目的數據庫中。在實際開發中,會采用反射機制,并在原有項目中設計好接口,以實現主動調用獨立jar(或class) 進行數據傳遞。

3 架構設計分析

3.1 反射解耦原理與實踐

3.1.1 原理

在面對不同的數據獲取環境時,編寫獨立的jar 程序進行數據抽取,這樣可以實現獨立開發,而不會影響到原有項目的代碼。然而,在調用這些jar程序時,需要一個通用的解決方案來實現對不同jar程序的調用。這就要求每個數據抽取程序設計出相同的調用方法和參數。根據設計模式原則中的“依賴倒置原則”(面向接口而不是具體實現),雖然沒有直接使用接口類型,但在反射機制的實踐中,動態調用類方法可以被理解為面向接口。例如,定義如下類結構:package com.p1; class App{public void run(){}}。每個數據抽取程序被劃分到不同的包中,它們具有相同的類名和方法,但內部實現邏輯完全不同。

為了能夠在運行時加載每個獨立的數據抽取程序(既可以是jar文件,也可以是class文件),這里以class為例,通過Class.forName“( 包名.類名”)的方式加載class。如果加載成功就執行,加載失敗則通過異常捕獲順序加載下一個。由于加載class時輸入的包名和類名屬于字符串,更容易提煉為參數,甚至可以把包名和類名作為數據庫中的配置項通過DAO層獲取,從而實現徹底解耦。這樣,新的數據抽取程序加入時,完全不需要修改任何主程序代碼,而只需要在數據庫中配置全限定名即可。

3.1.2 實踐

已知的數據獲取方式包括:從WebService 獲取XML 格式數據、從數據中心平臺API 獲取數據、從PostgreSQL數據庫獲取數據、從Kafka消費端獲取數據以及從Excel文件中獲取數據等。

對于從WebService獲取XML格式數據的情況,借助JDK自帶的工具wsimport生成WebService客戶端,將功能調用代碼放入com.core.extract.webservice.Cli?ent類中。部分代碼參考如下:

3.2 系統結構功能設計

在設計整個系統時,重點放在功能的獨立性和耦合性上,旨在減少各功能模塊之間的依賴程度,確保系統的易維護性和可擴展性。因此,系統被劃分為以下幾個關鍵模塊:

1) 數據抽取模塊:負責獲得實時數據。

2) 數據導出模塊:處理數據計算結果,生成數據報表,并負責數據的導出等功能。

3) 數據處理模塊:作為系統的核心模塊,它是主要的交互區域。

通過這種模塊化的設計,系統的結構變得清晰,每個模塊的職責明確,便于未來根據需求進行相應的功能擴展或調整。

首先,數據抽取模塊構成了系統運行的基礎部分,其主要職責是從生產環境中獲取實時數據。該模塊與各種數據庫、平臺接口、Kafka服務等數據源建立連接,定時或實時抽取所需數據,并將其傳輸到系統內部的MySQL數據庫表中,為后續的數據處理和導出提供數據基礎。數據抽取模塊包括:WebService、平臺API、Kafka、PostgreSQL、Excel及其他數據源。

其次,數據導出模塊負責將數據處理結果以多種形式導出,包括數據報表、數據文件、報警平臺消息推送等。該模塊提供了豐富的導出選項,以滿足不同用戶的需求,并保證了數據的靈活性和可擴展性。目前,數據導出模塊包括:推送平臺API、報警平臺、Ex?cel和報表。

最后,數據處理模塊是整個系統的核心模塊,也是用戶使用頻率最高的功能區域。該模塊提供了實時預報、歷史預報、洪水歸檔、模型調用、可視化呈現、Echarts、GIS等功能。

3.3 項目模塊組織代碼

原項目為單個Module實現,內部包含MVC三層結構。然而,新增的功能中包含相對獨立的GIS可視化系統,主要用于地理信息呈現。因此,可以將GIS前端及其交互的控制器層剝離成為獨立的Module。代碼組織的邏輯是橫向切分子系統,縱向切分代碼調用層次。因此,原項目被重構為包含若干Module的大項目,分為核心功能模塊群(由多個縱向切割的模塊,例如控制器層、域對象層、數據訪問層等)和獨立模塊(橫向切割,模塊內部包含MVC三層結構,形成若干相對獨立的子系統模塊)。

3.4 系統與Python 模型對接設計

使用Python語言,通過構建LSTM模型,形成適應某水庫流域特點的智能洪水預報方案。該方案采用歷史洪水數據進行模擬預報,以檢驗預報方案的效果。同時,利用氣象水文耦合技術,對未來水庫入庫洪水過程進行實時滾動預報。為實現Java與Python 的混合編程,特別是將Java 作為主控語言,需要在Java程序中以某種方式訪問Python腳本代碼[5]。Java 程序通過其命令行函數執行Python命令,以高效獲取數據,而Python執行的結果則通過Java對象直接獲取并返回給控制器。

// 為了消除硬編碼,下面采用了變量,cmd[]數組中的元素分別是命令行的命令和參數,元素之間是空格分隔符

此時,變量text保存了模型運算的結果,并在內存中直接由控制器返回給前端,用于繪制可視化圖形。這種調用方式使得數據無須落地,可直接調用,并將運算結果直接返回。

3.5 系統與GIS 純前端項目對接設計

前端采用Mars3D 開源框架實現快速開發。Mars3D基于Vue3+Vite構建,屬于純前端項目。在與SpringBoot項目對接時,需要使用異步通信(Mars3D框架內置Axios) ,這要求后端提供JSON 格式的、遵循REST風格的控制器接口。然而,原項目使用Thyme?leaf引擎渲染HTML文件,控制器采用@Controller 注解,方法返回視圖名稱。因此,在對接過程中,需要創建專門針對GIS的控制器,并使用SpringBoot的@Rest?Controller注解。

關鍵操作包括在后端部署以確保能正常運行。前端使用命令“npm run build”進行打包,隨后將打包得到的dist目錄下的文件復制到后端的static目錄中。需要注意的是,static目錄默認位于SpringBoot項目內部,在將SpringBoot項目打包成jar文件時,static目錄會被一同打包。如果static 目錄中的文件內容有變動,須重新打包。為便于部署,可以通過添加額外配置使static目錄從SpringBoot項目中獨立出來,這樣就無須因靜態資源的變化而重新打包。要使SpringBoot 引用外部資源,可在SpringBoot 的默認application.properties文件中添加關鍵代碼:

# 實際路徑根據實際情況修改

spring. web. resources. static-locations=file: D:/re?sources/static

4 結束語

隨著信息技術的快速發展,集成多語言和多框架的開發已成為跨專業和跨領域合作的主要趨勢。本項目建立在現有系統的基礎上,分析了新的需求,明確了項目開發的難點和關鍵技術,提出了符合項目實際需求的架構設計,并在新架構中實現了各個模塊的解耦和集成。特別是,使用反射機制極大地減少了項目功能間的依賴關系,實現了功能動態加載的靈活性設計。

項目開發的首要任務是確保按時交付。在系統運行資源充足、開發時間充裕及技術儲備充分的情況下,可以實現更優的設計方案。前后端分離+反射機制的應用將更好地適應當前的需求。

主站蜘蛛池模板: 四虎精品国产永久在线观看| 久久精品人人做人人爽电影蜜月| 日韩午夜福利在线观看| 国产精品久久久久久影院| 精品久久久久成人码免费动漫| 久久一本精品久久久ー99| 国产精品视频免费网站| 日本午夜精品一本在线观看| 欧美一区二区精品久久久| 欧美激情视频一区| 美女高潮全身流白浆福利区| 亚洲人妖在线| YW尤物AV无码国产在线观看| 欧美精品xx| 久久这里只有精品66| 激情综合婷婷丁香五月尤物| 日韩av资源在线| 亚洲IV视频免费在线光看| 日韩AV手机在线观看蜜芽| 久久精品无码中文字幕| 国产一二三区在线| 国产女人18水真多毛片18精品| 精品国产成人高清在线| 国产微拍一区二区三区四区| 国产精品自在拍首页视频8| 日本在线欧美在线| 国产91丝袜在线播放动漫 | 一级毛片不卡片免费观看| 香蕉99国内自产自拍视频| 99这里只有精品在线| 国产成人精品免费视频大全五级| hezyo加勒比一区二区三区| 国产精品久久久久婷婷五月| 亚洲视频四区| 老司国产精品视频91| 91久久偷偷做嫩草影院电| 91久久精品国产| 久久国产拍爱| 亚洲视频黄| 99久久国产综合精品2020| 国产精品视频观看裸模| 欧美在线一二区| 国产中文在线亚洲精品官网| 波多野结衣AV无码久久一区| 91系列在线观看| 呦视频在线一区二区三区| 92精品国产自产在线观看| 国产91全国探花系列在线播放| 国产一级α片| 国产SUV精品一区二区6| 波多野结衣一区二区三视频| 最新日本中文字幕| 91精品视频播放| 久久久久国产精品免费免费不卡| 亚洲三级成人| 东京热高清无码精品| 国产精品lululu在线观看| 欧美综合激情| 亚洲天堂网在线视频| 亚洲AⅤ波多系列中文字幕| 全裸无码专区| 在线观看亚洲天堂| 欧美在线三级| 国产一在线| 亚洲欧美成aⅴ人在线观看 | 国产小视频a在线观看| 99精品在线看| 欧洲极品无码一区二区三区| 亚洲精品无码久久毛片波多野吉| 一级毛片在线播放| 高潮爽到爆的喷水女主播视频 | 中文字幕调教一区二区视频| 中文一区二区视频| 国产拍在线| 亚洲天堂首页| 国产在线视频欧美亚综合| 激情在线网| 四虎国产在线观看| 国产女同自拍视频| 欧美亚洲国产一区| 狠狠色综合网| 亚洲精品不卡午夜精品|