특정 프로젝트에서 고객은 개발된 springboot를 배포하기 위해 기존 weblogic을 사용해야 했기 때문에 주로 tomcat 종속성을 제거하고 시작 클래스 처리를 추가하는 것을 포함하여 springboot에 대한 일부 구성 조정이 이루어졌습니다.
보통은 순조롭게 진행되지만 사실은 항상 사소한 문제가 있습니다.
패키지를 weblogic에 게시하고 시작하면 아래 그림과 같은 오류가 표시됩니다.
jar 패키지 충돌로 인한 오류임을 예외 내용으로 쉽게 판단할 수 있습니다.
찾은 후 weblogic에는 일부 타사 기본 jar 패키지를 저장하는 wls12213oracle_commonmodulesthirdparty
디렉터리가 있습니다. 이 디렉터리는 프로젝트 시작 프로세스 중에 여기서 jar 패키지를 먼저 로드한 다음 jar를 로드하는 것입니다. 프로젝트의 jar 패키지 버전이 weblogic의 jar 패키지 버전과 정확히 동일하다고 보장할 수 없기 때문에 일관성 없는 jar 패키지 버전으로 인해 일반적인 클래스 로딩 충돌이 발생합니다. wls12213oracle_commonmodulesthirdparty
,其中存放了一些第三方的默认的 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\srcmainwebappWEB-INFweblogic.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 正常部署运行。
部署的过程中还出现了 GC 错误 GC overhead limit exceeded
,这个问题比较容易解决,给 weblogic 启动环境修改内存值,调大一些即可。
修改对应文件 D:weblogicfmw_12.2.1.3.0_wls_quick_Disk1_1of1wls12213user_projectsdomainsbase_domainbinsetDomainEnv.cmd
springboot 프로젝트 코드 및 리소스와 동일한 수준에 webapp 디렉터리를 생성한 후 webapp 디렉터리 아래에 WEB-INF 디렉터리를 생성하고 weblogic을 배치합니다. springboot-weblogic-demo 프로젝트를 예로 들어 WEB-INF에 있는 .xml 파일의 전체 경로는 springboot-weblogic-demo\srcmainwebappWEB-INFweblogic.xml
이고 내용은 다음과 같습니다.
if NOT "%JAVA_VENDOR%"=="HP" ( if "%VM_TYPE%"=="HotSpot" ( set WLS_MEM_ARGS_64BIT=-Xms1024m -Xmx4096m set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m ) )
🎜문제 2🎜🎜배포 과정에서도 GC 오류이 파일만 추가하고 구성하면 되며, 여기에는 인터넷에서 언급되는 web.xml 추가 작업을 추가하지 않았습니다. 예제는 springboot 2.7.2의 일반적인 배포 및 작업을 기반으로 합니다.
GC 오버헤드 제한 초과
가 발생했습니다. 이 문제는 상대적으로 해결하기 쉽습니다. weblogic 시작 환경의 메모리 값을 늘리면 됩니다. 🎜🎜대략 라인 200의 시작 부분에서 해당 파일 D:weblogicfmw_12.2.1.3.0_wls_quick_Disk1_1of1wls12213user_projectsdomainsbase_domainbinsetDomainEnv.cmd
를 수정합니다. 수정된 내용은 다음과 같습니다. 🎜rrreee🎜weblogic 서비스를 다시 시작하면 다음과 같은 내용이 표시됩니다. 수정 후 남은 메모리 구성: 🎜🎜🎜🎜🎜🎜 WLS_MEM_ARGS_64BIT의 원래 값은 -Xms256m -Xmx512m이거나 더 많은 메모리 설정을 추가할 수 있습니다. 예: -Xms512m -Xmx1024m -XX:MaxNewSize=1024m - XX:MaxPermSize=1024m🎜🎜위 내용은 springboot를 weblogic에 배포할 때 jar 패키지 충돌을 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!