解决springboot 部署到 weblogic 中 jar 包冲突的问题

 更新时间:2022年08月11日 17:15:44   作者:catoop  
这篇文章主要介绍了springboot 部署到 weblogic 中 jar 包冲突,weblogic 也有是解决方案的,可以通过新增并配置 weblogic.xml 文件来定义哪些类需要优先从项目工程包的 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 包冲突内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring静态代理和动态代理代码详解

    Spring静态代理和动态代理代码详解

    这篇文章主要介绍了Spring静态代理和动态代理代码详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring Boot Event Bus用法小结

    Spring Boot Event Bus用法小结

    Spring Boot Event Bus是Spring框架中事件驱动编程的一部分,本文主要介绍了Spring Boot Event Bus用法小结,感兴趣的可以了解一下
    2023-09-09
  • java反射拼接方法名动态执行方法实例

    java反射拼接方法名动态执行方法实例

    下面小编就为大家带来一篇java反射拼接方法名动态执行方法实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java文件与IO流操作原理详细分析

    Java文件与IO流操作原理详细分析

    在java中提供有对于文件操作系统的支持,这个支持在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理
    2022-09-09
  • Java程序顺序结构中逻辑控制语句详解流程

    Java程序顺序结构中逻辑控制语句详解流程

    在程序开发的过程之中一共会存在有三种程序逻辑:顺序结构、分支结构、循环结构,对于之前所编写的代码大部分都是顺序结构的定义,即:所有的程序将按照定义的代码顺序依次执行
    2021-10-10
  • Spring之异步任务@Async解读

    Spring之异步任务@Async解读

    这篇文章主要介绍了Spring之异步任务@Async,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 线程池ThreadPoolExecutor并行处理实现代码

    线程池ThreadPoolExecutor并行处理实现代码

    这篇文章主要介绍了线程池ThreadPoolExecutor并行处理实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Spring Boot中自动执行sql脚本的方法实例

    Spring Boot中自动执行sql脚本的方法实例

    在SpringBoot的架构中,DataSourceInitializer类可以在项目启动后初始化数据,我们可以通过自动执行自定义sql脚本初始化数据,下面这篇文章主要给大家介绍了关于Spring Boot中自动执行sql脚本的相关资料,需要的朋友可以参考下
    2022-01-01
  • Java中如何判断中文字符串长度

    Java中如何判断中文字符串长度

    这篇文章主要介绍了Java中如何判断中文字符串长度问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 详解Java中IO字节流基本操作(复制文件)并测试性能

    详解Java中IO字节流基本操作(复制文件)并测试性能

    这篇文章主要介绍了Java中IO字节流基本操作(复制文件)并测试性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论