DelphiWebMVC框架下BPL熱部署實現

2021-09-09 06:40:45 字數 1598 閱讀 7793

系統在正常運**況下,當我們進行業務變更時,我們不希望系統停下來,這會對我們的使用者造成不好的影響,php,python 可以直接更換檔案來實現,也可以用多層來實現,但多層無形中也會增加工作量,

dephi這裡的解決方法是使用bpl技術,把具體的業務封裝在bpl中,當進行業務更換時,通過公升級類版本,修改配置檔案來實現動態更新業務,從而達到熱部署。

下面說下delphiwebmvc如何實現:

專案結構:

這裡4個專案delphimvc,userpackage,loginpackage,share

delphimvc 主工程用來進行bpl包的呼叫及框架結構

userpackage 使用者業務包

loginpackage 登入業務包

share 共享包,其他包開發是需要引用

上圖指出了啟用bpl包模式的設定,開啟包開發模式,設定包檢測時間與舊包解除安裝時間,

這裡預設5秒進一次配置檔案檢測當版本公升級後載入新包,包類名稱需要修改可以加上版本號,否則載入時會提示 包類重複,無法載入成功,當檢測到新包是,舊包這裡預設10秒後解除安裝,這裡為了防止併發時舊業務還在進行操作,進行延時解除安裝。

下面說配置檔案package.json

userpackage 包名公升級是不可以修改

pakcage:bpl檔案存放位置,公升級時指向新位置,因為舊包還在使用無法替換,也不能替換。

ver:版本

tuserpackage 類的別名,在程式內部呼叫

getdata 類方法別名,內部呼叫使用。

下面看下具體呼叫:

這是 userservice 類 使用者服務類,在此類來呼叫 包中具體的業務,

通過呼叫父類的 exec 方法 設定 包名,類別名,類方法別名,和引數,來呼叫配置檔案中指定的方法

我們看下包內方法怎麼編寫

開啟 userpakage 包內的類 userpackage 類 這裡類我公升級到v1版本,如果再公升級可以到v2 版本,批量替換即可。

方法引數必須是  map 引數以json結構傳入,繼承 tbasepackage類

initialization

registerclass(tuserpackagev1);

finalization

unregisterclass(tuserpackagev1);

這塊是必須的否則包無法載入。

注意:方法必須放在published 下否則方法無法被呼叫。

這樣即可實現在服務不停止下進行業務的更新切換。

官網

DelphiWebMVC框架下不同資料庫的使用

在系統開發是,有時我們需要鏈結不同的資料庫,連線mysql同時需要連線mssql,在框架中按照下面方法設定。開啟 udbconfig.pas 檔案 default tdbsqlite 必須有default成員變數名 mysql tdbmysql constructor create destruct...

Java集合框架(下)

上篇博文介紹了collection集合 這篇博文將介紹map集合。首先map和collection都是乙個介面,具體的實現都由下面的實現類實現功能。它們最大的區別就是collection是單列集合,map是雙列集合 泛型引數是乙個鍵 值對 map集合與set類似,主要有hashmap treemap...

php laravel框架下通過jsonp跨域訪問

同一網域名稱下的引數傳遞是很容易實現的,但是跨域就存在一定的限制。當然可以搜到很多介紹的帖子,在這裡我對jsonp這種單向跨域的方式進行總結,並附上乙個小例子。問題描述 由於在伺服器上開發,用不用的埠號來區分不同的專案。實現192.168.1.10 8888可以呼叫8889專案上的引數。源於單點登入...