Maison  >  Article  >  Java  >  Comment résoudre les conflits de packages jar lors du déploiement de Springboot sur Weblogic

Comment résoudre les conflits de packages jar lors du déploiement de Springboot sur Weblogic

PHPz
PHPzavant
2023-05-11 17:10:061645parcourir

Contexte

Dans un certain projet, le client devait utiliser la logique Web existante pour déployer le Springboot développé, donc certains ajustements de configuration ont été apportés au Springboot, notamment la suppression de la dépendance Tomcat et l'ajout du traitement de classe de démarrage.

Cela se passe généralement bien, mais en fait, il y a toujours quelques problèmes mineurs.

Problème 1

Lorsque le package est publié sur weblogic et démarré, l'erreur affichée dans la figure ci-dessous :

Comment résoudre les conflits de packages jar lors du déploiement de Springboot sur Weblogic

Il peut être facilement jugé à partir du contenu de l'exception qu'il s'agit d'une erreur causée par un conflit de package jar.

Après la localisation, weblogic dispose d'un répertoire wls12213oracle_commonmodulesthirdparty, qui stocke certains packages jar tiers par défaut. Pendant le processus de démarrage du projet, la valeur par défaut est de charger d'abord le package jar ici, puis de charger le jar. dans le package du projet, car vous ne pouvez pas garantir que la version du package jar dans le projet est exactement la même que la version du package jar dans weblogic, donc un conflit de chargement de classe courant se produit en raison de versions de package jar incohérentes. 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

Vérifiez les informations du site officiel, weblogic a également une solution. Vous pouvez définir quelles classes doivent être chargées en premier à partir du package jar du package d'ingénierie du projet en ajoutant et en configurant le fichier weblogic.xml.

La méthode de configuration est la suivante :

Comment résoudre les conflits de packages jar lors du déploiement de Springboot sur WeblogicCréez un répertoire webapp au même niveau que le code et la ressource du projet springboot, puis créez un répertoire WEB-INF sous le répertoire webapp, et placez le weblogic .xml dans WEB-INF , en prenant le projet springboot-weblogic-demo comme exemple, son chemin complet est springboot-weblogic-demo\srcmainwebappWEB-INFweblogic.xml, et son contenu est le suivant :

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

Ajoutez et configurez simplement ce fichier, il n'y a pas d'autre configuration. Je n'ai pas ajouté les opérations d'ajout de web.xml mentionnées sur Internet ici. L'exemple est basé sur le déploiement et le fonctionnement normaux de springboot 2.7.2.

🎜Problème 2🎜🎜L'erreur GC Limite de surcharge GC dépassée s'est également produite pendant le processus de déploiement. Ce problème est relativement facile à résoudre. Il suffit de modifier la valeur de la mémoire pour l'environnement de démarrage de weblogic et de l'augmenter. 🎜🎜Modifiez le fichier correspondant D:weblogicfmw_12.2.1.3.0_wls_quick_Disk1_1of1wls12213user_projectsdomainsbase_domainbinsetDomainEnv.cmd, environ au début de la ligne 200. Le contenu modifié est le suivant : 🎜rrreee🎜Redémarrez le service weblogic et vous verrez depuis le début La configuration de la mémoire restante après notre modification : 🎜🎜🎜🎜🎜🎜 La valeur originale de WLS_MEM_ARGS_64BIT est -Xms256m -Xmx512m, ou vous pouvez ajouter plus de paramètres de mémoire, par exemple : -Xms512m -Xmx1024m -XX:MaxNewSize=1024m - XX:MaxPermSize=1024m🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer