解決springboot 部署到 weblogic 中 jar 包沖突的問題
背景
某項目,客戶要求使用已有的 weblogic 部署已經開發好的 springboot,於是乎對 springboot 進行瞭部分配置的調整,主要包括去除 tomcat 依賴,增加啟動類的處理。
一般都會比較順利,實際上總會遇到些小問題。
本文不贅述如何在 weblogic 中部署項目,如果你有需要,可以訪問https://www.jb51.net/article/218458.htm 參考該文章。
問題1
打包後發佈到 weblogic 上啟動時,如下圖所示的錯誤:
從異常內容可以很容易判斷出,這是 jar 包沖突導致的錯誤。
經過定位,weblogic 有個目錄 wls12213\oracle_common\modules\thirdparty
,其中存放瞭一些第三方的默認的 jar 包,項目啟動過程中默認是先加載這裡的 jar 包,再加載項目工程中的 jar 包,因為你無法保證項目工程中的 jar 包和 weblogic 中的 jar 包版本剛好一致,所以就因為 jar 包版本不一致出現瞭比較常見的類加載沖突的問題。
查閱官網資料,weblogic 也有是解決方案的,可以通過新增並配置 weblogic.xml 文件來定義哪些類需要優先從項目工程包的 jar 包中加載。
配置方法如下:
在 springboot 項目代碼和 resource 同級創建一個 webapp 目錄,然後再 webapp 目錄下創建 WEB-INF 目錄,將 weblogic.xml 文件放在 WEB-INF 中,以 springboot-weblogic-demo 工程為例它的完整路徑就是 springboot-weblogic-demo\\src\main\webapp\WEB-INF\weblogic.xml
,其內容如下:
<?xml version='1.0' encoding='UTF-8'?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>org.slf4j</package-name> <package-name>javax.validation.*</package-name> <package-name>org.hibernate.*</package-name> <package-name>javax.el.*</package-name> <package-name>org.springframework.*</package-name> <!--解決項目中jackson的jar包和weblogic中thirdparty的jar包沖突問題,配置優先加載項目中的jar--> <package-name>com.fasterxml.jackson.*</package-name> </prefer-application-packages> </container-descriptor> <context-root>/springboot-weblogic-demo</context-root> </weblogic-web-app>
僅僅是添加配置瞭這一個文件,沒有其他什麼配置瞭,網上說的那些添加 web.xml 的操作,我這裡並沒有添加,示例是基於 springboot 2.7.2 正常部署運行。
問題2
部署的過程中還出現瞭 GC 錯誤 GC overhead limit exceeded
,這個問題比較容易解決,給 weblogic 啟動環境修改內存值,調大一些即可。
修改對應文件 D:\weblogic\fmw_12.2.1.3.0_wls_quick_Disk1_1of1\wls12213\user_projects\domains\base_domain\bin\setDomainEnv.cmd
,大約在 200 行出頭的位置,修改後的內容如下:
if NOT "%JAVA_VENDOR%"=="HP" ( if "%VM_TYPE%"=="HotSpot" ( set WLS_MEM_ARGS_64BIT=-Xms1024m -Xmx4096m set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m ) )
重啟 weblogic 服務,最開始就能看到我們修改後剩下的內存配置:
WLS_MEM_ARGS_64BIT 的原始值為 -Xms256m -Xmx512m,或者你也可以追加更多關於內存的設置,例如:-Xms512m -Xmx1024m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m
我寫好的 springboot-weblogic-demo 示例工程代碼的地址:https://github.com/xzxiaoshan/springboot-weblogic-demo
到此這篇關於springboot 部署到 weblogic 中 jar 包沖突的文章就介紹到這瞭,更多相關springboot 部署weblogic jar 包沖突內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 解決weblogic部署springboot項目步驟及可能會出現的問題
- SpringBoot項目部署在weblogic中間件的註意事項說明
- 解決Weblogic部署war找不到spring配置文件的問題
- 基於IDEA 的遠程調試 Weblogic的操作過程
- weblogic服務建立數據源連接測試更新mysql驅動包的問題及解決方法