Heim  >  Artikel  >  Java  >  So lösen Sie JAR-Paketkonflikte bei der Bereitstellung von Springboot für Weblogic

So lösen Sie JAR-Paketkonflikte bei der Bereitstellung von Springboot für Weblogic

PHPz
PHPznach vorne
2023-05-11 17:10:061646Durchsuche

Hintergrund

In einem bestimmten Projekt musste der Kunde vorhandene Weblogik verwenden, um das entwickelte Springboot bereitzustellen. Daher wurden einige Konfigurationsanpassungen an Springboot vorgenommen, darunter hauptsächlich das Entfernen der Tomcat-Abhängigkeit und das Hinzufügen von Startup-Klassen. Verarbeitung.

Im Allgemeinen läuft es reibungslos, aber tatsächlich gibt es immer ein paar kleinere Probleme.

Frage 1

Wenn das Paket in Weblogic veröffentlicht und gestartet wird, ist der in der Abbildung unten gezeigte Fehler:

So lösen Sie JAR-Paketkonflikte bei der Bereitstellung von Springboot für Weblogic# 🎜🎜#

Anhand des Ausnahmeinhalts kann leicht beurteilt werden, dass es sich um einen Fehler handelt, der durch einen JAR-Paketkonflikt verursacht wird.

Nach dem Auffinden verfügt Weblogic über ein Verzeichnis wls12213oracle_commonmodulesthirdparty, in dem einige Standard-JAR-Pakete von Drittanbietern gespeichert werden. Hier wird zuerst das Standard-JAR-Paket geladen Laden Sie dann das JAR-Paket im Projektprojekt, da Sie nicht garantieren können, dass die Versionen des JAR-Pakets im Projektprojekt und des JAR-Pakets in Weblogic genau identisch sind, sodass aufgrund inkonsistenter JAR-Paketversionen ein häufiger Klassenladekonflikt auftritt.

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=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?>
<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:weblogicfmw_12.2.1.3.0_wls_quick_Disk1_1of1wls12213user_projectsdomainsbase_domainbinsetDomainEnv.cmd Überprüfen Sie die offiziellen Website-Informationen. Weblogic hat auch eine Lösung. Sie können definieren, welche Klassen zuerst aus dem JAR-Paket des Projekt-Engineering-Pakets geladen werden müssen, indem Sie die Datei weblogic.xml hinzufügen und konfigurieren.

Die Konfigurationsmethode lautet wie folgt:

Erstellen Sie ein Webapp-Verzeichnis auf derselben Ebene wie der Code und die Ressource des Springboot-Projekts und erstellen Sie dann ein Platzieren Sie die Datei weblogic.xml im Verzeichnis WEB-INF im Verzeichnis WEB-INF. Am Beispiel des Projekts springboot-weblogic-demo lautet der vollständige Pfad springboot-weblogic-demo\srcmainwebappWEB-INFweblogic.xml , und sein Inhalt ist wie folgt: So lösen Sie JAR-Paketkonflikte bei der Bereitstellung von Springboot für Weblogic

if NOT "%JAVA_VENDOR%"=="HP" (
	if "%VM_TYPE%"=="HotSpot" (
		set WLS_MEM_ARGS_64BIT=-Xms1024m -Xmx4096m
		set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m
	)
)

Fügen Sie einfach diese Datei hinzu und konfigurieren Sie sie. Es gibt keine andere Konfiguration. Ich habe die erwähnten Vorgänge zum Hinzufügen von web.xml nicht hinzugefügt im Internet hier. Das Beispiel basiert auf Springboot 2.7.2 Normaler Bereitstellungsbetrieb.

Problem 2#🎜🎜##🎜🎜#Der GC-Fehler GC-Overhead-Limit überschritten ist auch während des Bereitstellungsprozesses aufgetreten. Dieses Problem ist relativ einfach zu lösen . Ändern Sie den Speicherwert in der Weblogic-Startumgebung und erhöhen Sie ihn. #🎜🎜##🎜🎜# Ändern Sie die entsprechende Datei D:weblogicfmw_12.2.1.3.0_wls_quick_Disk1_1of1wls12213user_projectsdomainsbase_domainEnv.cmd, ungefähr am Anfang von Zeile 200. Der geänderte Inhalt lautet wie folgt: #🎜🎜#rrre ee # 🎜 🎜#Starten Sie den Weblogic-Dienst neu und Sie können die verbleibende Speicherkonfiguration nach unserer Änderung am Anfang sehen: #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Das Original Der Wert von WLS_MEM_ARGS_64BIT ist -Xms256m -Xmx512m, oder Sie können weitere Speichereinstellungen hinzufügen, zum Beispiel: -Xms512m -Xmx1024m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m#🎜🎜##🎜🎜#

Das obige ist der detaillierte Inhalt vonSo lösen Sie JAR-Paketkonflikte bei der Bereitstellung von Springboot für Weblogic. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen