1.升級需求
客戶系統一旦部署上線,開始使用後,以後再進行更新升級,就不會像以前全新部署那樣簡單和方便了。
在升級的過程中,需要考慮以下幾個問題:
- 系統正在生產和使用,不能停工。升級過程中,不能影響到客戶使用。
- 原有系統中的數據不能丟失。數據包括文件數據和數據庫數據。
- 文件數據比較簡單,直接複製拷貝即可同步。
- 數據庫文件則比較麻煩,不僅要考慮到數據庫表結構的變動,還涉及到每個表數據內容的變動。
針對升級過程中要注意的問題,特制定升級指導書。
2.升級過程
2.1.文件同步
文件的同步,只需要將最新的文件包上傳到舊系統的文件夾,進行覆蓋即可。
在覆蓋之前,要進行備份,以免覆蓋之後出現問題,還可以進行還原。
目前我們的文件,主要是指項目打包後,生成的war的文件包,需要放到Tomcat下的站點中。
2.2.數據庫同步
數據庫同步分爲表結構同步和表數據同步。
2.2.1.表結構同步
首先需要弄清楚新舊數據庫表結構存在哪些差異。
在開發的過程中,開發人員可能會記錄改動了哪些表字段,以便將來升級時進行同步修改。但是這樣記錄就會存在很多遺漏。首先沒法確保每次調整表結構都有記錄備案,其次當多人同時維護數據庫表結構時,也沒法清楚其他人修改了哪些字段。因此,表結構的變動,我們要藉助對比工具進行分析。
阿里雲的DMS裏面,自帶有數據庫表結構對比功能。當需要對比時,我們可以進行付費開通(按量購買,使用1天)。結束使用後,關閉服務(否則如果是按量購買,會持續每天進行扣費,而不會自動停掉,這是一個坑)。
以後在我們自己的太極平臺中,要集成這個數據庫表結構對比功能。
通過對比後,可以看到數據庫表結構存在哪些差異。系統會自動生成差異的SQL語句。如下所示,是對比後產生的差異SQL腳本。通過執行這個腳本,即可實現表結構的同步。
ALTER TABLE `qd_user`
ADD KEY `FK_User_DutyId`(`DutyId`) USING BTREE,
ADD KEY `FK_User_RoleId`(`RoleId`) USING BTREE,
DROP KEY `Index_RoleId`;
ALTER TABLE `qd_user`
ADD CONSTRAINT `FK_User_DutyId` FOREIGN KEY (`DutyId`) REFERENCES `taiji_dev`.`qd_user_duty` (`Id`) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `qd_user`
ADD CONSTRAINT `FK_User_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `taiji_dev`.`qd_user_role` (`Id`) ON UPDATE NO ACTION;
特別注意:表結構的對比也存在不完善的地方。即沒法區分一個新的字段(名稱不同的字段)到底是新增的字段,還是原來改名的字段。因爲通過字段名稱進行比對時,只會發現舊錶中少了某個字段,新表中多了某個字段,不會自動的關聯舊錶少的字段就是新表增加的字段。
所以當看到有新增字段時,要特別注意到底是不是字段改名。切勿直接執行刪除字段後,再添加字段,否則就會導致數據丟失。
另外,在需要太極平臺內核升級時,要先進行內核升級,再進行表結果對比。因爲框架升級也會自動變更一部分表結構。
2.2.2.表數據同步
表數據的同步,主要是指如果有新增表,且新增表中有初始化數據,那麼也需要將初始化數據同步到新的數據庫中。這方面可以通過執行insert腳本即可。將表數據導出爲insert執行腳本,在新的數據庫中執行即可。
2.3.太極框架升級
太極平臺框架升級後,會變動數據庫表結構,也會更新框架包文件。因此升級時,既要注意數據庫表結構的升級,也要注意引入框架包的升級。
所以,切勿盲目衝動的進行數據庫內核升級。因爲如果僅僅只升級數據庫內核,而不引入新版本的依賴包,並進行重新打包發佈更新,那麼當前正在運行的系統就會出錯。因爲數據庫表結構已是新版本,但依賴包文件還是舊版本,必然會出錯。
框架內核升級分爲三個步驟:數據庫升級、依賴包升級、項目文件升級。
2.3.1數據庫升級
在太極平臺管理後臺,有2個地方可以進行數據庫升級。
1、在我的項目數據庫中,對相應的項目進行升級。點開我的項目數據庫,如下圖所示。
在列表數據的最後面,有升級內核操作。同時,在旁邊也可以看到當前系統的內核版本號。
點擊升級內核後,會彈出升級對話框。
1)升級過程會驗證當前數據庫賬號權限。因爲要修改表結構,所以需要賬號有DDL權限。
2)也會驗證版本號是否是最新,是否需要升級。
3)不是最新版本,纔可以升級。點擊“升級”按鈕,即可對當前數據庫進行內核升級。
每次升級都只能升級一個版本號。版本號相隔太遠,也只能一次次升級。升級過程執行完畢後,可以看到升級日誌,知道是否升級成功。
2、單獨的數據庫表升級
針對有些沒有添加到項目中的數據庫,也可以進行單獨的升級。在“我的”菜單中有“數據庫升級”菜單,點擊後加載升級頁面。如下圖所示,可以進行單獨的升級。
此時升級,需要手動的把數據庫的連接地址、賬號、密碼輸入進去。測試連接成功後,纔可以進行升級。升級過程一樣,系統同樣會驗證賬號權限、版本號等。
2.3.2.依賴包升級
數據庫升級後,依賴包也必須升級到對應的版本,否則就會不匹配。
在IDEA編輯器中,打開pom.xml文件,找到奇點框架的依賴包配置項。如下圖所示,確保數據庫內核的版本號,與依賴包的版本號一致。
內核依賴包有2個文件:QiDianAdminCommon和QiDianAdminTemplate文件,分別是Java文件包和前端的jsp文件包。
另外還有一個QiDianWebCommon,這個是QiDianAdminCommon的依賴包,以後會考慮直接整合到QiDianAdminCommon中,以免版本號不好控制。
2.3.3項目文件升級
引入最新的依賴包後,項目文件需要重新編譯打包。並用最新的包文件替換掉之前的舊版本,從而完成項目文件的升級。
可通過FTP上傳最新項目文件,或遠程桌面進行更新。更新完畢後,重啓站點,完成升級。
注意覆蓋文件後,進行數據庫連接地址的調整修改。
發佈成功後,訪問系統,進入後臺,在主頁面的最底部右下角,查看版本號是否是最新版本。
至此,升級過程完畢。
3.生產環境升級
如果數據庫已經加入到了太極平臺的管理後臺,那麼數據庫的升級會非常方便。但是在真實環境中,特別是當系統部署在企業內網,連不上外網時,升級也不會這麼方便。可以按下面的步驟進行升級。
- 將客戶的數據庫導出一份出來。如果涉及到敏感數據,只需要導出太極框架相關的表數據即可,其他業務數據不需要導出。
- 將導出的數據,導入到測試庫中。可以是自己的測試庫,或者是當前項目的測試版本庫,或者重寫再建一個數據庫。
- 通過太極平臺的升級功能,連接上這個數據庫,進行升級。
- 升級完成,測試是否功能升級成功。
- 導出升級後的數據庫腳本,再次導入到生產環境中進行覆蓋。
- 覆蓋之前,一定要先備份數據庫。以免出錯後,可以還原。