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

目录
  • 背景
  • 问题1
  • 问题2

背景

某项目,客户要求使用已有的 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 包冲突内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot部署在Weblogic的操作步骤

    SpringBoot版本:2.0.1.RELEASE WebLogic版本:Weblogic 12c 本文为测试SpringBoot项目部署在Weblogic服务器上的测试项目.不牵扯到任何的业务逻辑.可以直接将本文重点标注的几个点移至您现有的项目. SpringBoot项目的pom.xml文件 其中需要添加的依赖为: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s

  • 解决weblogic部署springboot项目步骤及可能会出现的问题

    项目为springboot的需要适配weblogic 第一步 修改启动类, 很多搜到的都是这样 修改启动类StartEPassApplication 第二步 完全排除掉tomcat 详情请看下面的地址 完全排除springboot的tomcat还需加上weblogic.xml <?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xml

  • SpringBoot项目部署在weblogic中间件的注意事项说明

    SpringBoot项目部署在weblogic中间件的注意事项 1.SpringBoot项目Tomcat部署无需手动配置web.xml 但是使用weblogic部署项目时需配置所有相关的监听器和过滤器等. <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

  • SpringBoot解决jar包冲突的问题,简单有效

    目录 SpringBoot解决jar包冲突 今天SpringBoot项目打包发现一直在报错 我查到的一个解决方案,可使用所有jar包冲突问题 spring boot jar冲突问题集锦 1.日志jar包冲突 2.本地ok,测试环境失败之mainstay 3.本地ok,测试环境失败之servlet 4.本地ok,测试环境失败之tomcat 5.本地ok,测试环境失败之spring asm 6.万恶的测试环境字节码验证失败 7.日志不能正常输出问题 8.本地打包正常 SpringBoot解决jar包

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

    目录 背景 问题1 问题2 背景 某项目,客户要求使用已有的 weblogic 部署已经开发好的 springboot,于是乎对 springboot 进行了部分配置的调整,主要包括去除 tomcat 依赖,增加启动类的处理. 一般都会比较顺利,实际上总会遇到些小问题. 本文不赘述如何在 weblogic 中部署项目,如果你有需要,可以访问https://www.jb51.net/article/218458.htm 参考该文章. 问题1 打包后发布到 weblogic 上启动时,如下图所示的错

  • Maven中jar包冲突原理与解决办法

    Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题.本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲突的解决办法. 一.Maven中jar包冲突产生原因 MAVEN项目运行中如果报如下错误: Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException 十有八九是Maven jar包冲突造成的.那

  • Hbase、elasticsearch整合中jar包冲突的问题解决

    问题背景 再数据平台中,项目搭建需要使用es和HBASE搭建数据查询接口,整合的过程中出现jar包冲突的bug :com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access m

  • 解决eclipse中maven引用不到已经存在maven中jar包的问题

    之前,用过maven管理项目的童鞋都知道本地会有一个${User_Home}.m2/repository仓库 是用来存放jar包的地方.但是,在eclipse中的maven仓库中 搜索不到本地仓库中的jar包. 原因是因为maven中的本地仓库的index索引没有更新,导致在eclipse的maven插件中搜索不到. 解决方案: 在eclipse中打开菜单 window-> show view –> other –> Maven -> maven repositories 打开之后

  • 完美解决android 项目jar包冲突的问题

    大家在做开发中竟然需要用到一些三方库 或者 需要集成三方的SDK开发包,尤其是项目特别庞大的时候,引用的三方的东西特别多,那么肯定会碰到一些jar包冲突的情况. 常见的情况有以下几种 1.项目自己引用jar包重复 2.项目中jar包和三方SDK 3.三方sdk之间都含有相同类 4.打包时候出现编译错误,出现冲突 1.项目自己引用jar包重复 com.android.dex.DexException: Multiple dex files define Landroid/support/v4/ac

  • 解决idea导入maven项目缺少jar包的问题

    之前一直用的elipse,现在用idea不熟悉,这里记录一下.这里以idea2017为例. 导入elipse的maven项目,提示缺少jar包,肯定是idea没有给你导包. 第一步,首先确认自己的idea和maven的环境有没有配置好. 第二步,确认自己导项目时候的Module设置. 搞定自己的maven配置之后,咱们再来看一下项目的Module设置问题. 删掉之前Module,重新再导一遍. 点击 + 之后选择项目的本地路径,然后在弹出来的界面中选择Maven,之后一路 Next ,最后点击A

  • 使用maven工具解决jar包冲突或重复加载的问题

    在使用maven开发项目的过程中,经常会遇到jar包重复加载或者jar包冲突的问题的,但是由于有些jar是由于maven的依赖加载自动加载进来的, 而不是开发者自己配置的,特别是当项目中pom中配置的jar包依赖本身很多时,开发者靠自己的经验,有时很难找出是哪个jar的加载导致加载了 多余的依赖jar,从而产生冲突. 今天刚好遇到一个借用eclipse中的maven插件解决jar包依赖冲突的问题,分享一下. 项目中出现的问题如下: Caused by: java.lang.NoClassDefF

  • maven工程中jar包瘦身的五种方法

    java项目中常用maven工具来进行工程管理,但经常遇到的一个问题是生成的jar包越来越大,编译一次工程越来越慢.怎么有效地去除冗余依赖,给jar包进行瘦身,是一项必备技能.下面介绍在maven工程中jar包瘦身五大法: 一.将环境中已包含的依赖包的scope设置为provided pom中依赖的部分包可能在你程序运行环境中已经包含,此时应该将依赖包的scope设置为provided.如protobuf包如在环境中已包含,则应设置为: <dependency> <groupId>

  • SpringBoot项目引入第三方sdk jar包的解决方案

    目录 场景 解决方案 总结 参考资料 场景 对接第三方接口,他们有自己封装的SDK jar包,但是没有对外统一的maven仓库.我们自己项目需要集成这个离线的jar包? 解决方案 1. jar上传到本地的maven仓库,然后通过pom依赖,引入第三方jar包.个人觉得这个是比较理想的解决方案. 2.第二种方案,将第三方的sdk jar包放到项目里面.我们是微服务应用打成的jar包,有类似的可以做个参考. 具体的做法: 2.1 引用本地jar包,我的是将jar包放在/resources/lib/下

随机推荐