记一次Weblogic发布Springboot遇到的坑

项目使用的是Springboot,之前直接使用JAR包的方式发布,但在客户这边实施发布的时候,客户使用的容器是weblogic,版本为 10.3.6。  痛苦就此开始!

不过项目组还有另外一个也同样使用了Springboot,他们已经顺利发布了,嗯~ 再百度一下, 哈哈哈,这还不是简简单单!

这个事情,随手扔给下面的技术人员搞定就ok的嘛~   结果一周过去了,跟我说项目启不来。没任何反应 。   我???

这么简单的事情都搞不定,我要你们何用?  于是我就大发慈悲,来帮帮你们吧~   我仿佛看到了 轻轻松松搞定后,他们对我投来的崇拜目光~

先把之前看到的那片文章找出来,认真研究一下。  这里感谢【书上有云】的这篇文章【https://blog.csdn.net/qq_32734365/article/details/79295535】,帮助很大!

简单说梳理一下思路,需要做如下事情:

1、将项目web调整为 servlet 2.5 ,并在pom.xml添加对应的支持依赖;

2、排除了自身的Tomcat,如果需要本地测试,则添加到provide中;

3、新增web.xml, contextConfigLocation 配置启动类,新增weblogic.xml;

4、启动类需要继承SpringBootServletInitializer、实现WebApplicationInitializer接口,重写configure方法;

5、在pom.xml中,将打包方式从jar改成war。

一切就绪,war成功编译,然而发布到weblogic,还是启动失败!  what?   肿么不对呢?

只有一个醒目的错误:Caused By: java.lang.NoClassDefFoundError: javax/servlet/MultipartConfigElement

回想可以先在本地用Tomcat6 试试,于是就先开始用Tomcat6本地调试一下。

继续把war包扔到Tomcat的webapp下面,启动ing。。。。似乎没有反应,查看log

严重: Exception sending context initialized event to listener instance of class org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
java.lang.NoClassDefFoundError: javax/servlet/MultipartConfigElement

棒棒哒! 最起码问题复现了,其实这个问题好解决,Springboot默认版本是3.0,在pom.xml中添加 servlet的包,变成2.5 就行了。  ok! 问题1消灭!!!

重新打包,Tomcat完美运行,美滋滋~

再次扔到weblogic上面,又出来一个新的玩意:

Caused By:java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory

这是什么鬼? 似乎没见过呀,百度一下,似乎就一个人提到这个问题,回答的也是敷衍没实质作用。

嗯,还出了一个问题,weblogic控制台没法进了。登录就弹出这个提示:

已禁用所需的MBean服务器,这将阻止WebLogic管理控制台的正常操作,

请在该域的配置中启用 DomainRuntimeMBean 服务器和 Edit MBean 服务器。

氮素,我重启Weblogic服务后,居然神奇的可以访问到项目了,这是什么骚操作。 一脸懵逼zzz?

可是这个问题不正常呀,清理到应用,重启WebLogic,控制台又能顺利进去了,再发布应用,却怎么也启不来。就开始不停地:

Caused By:java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory

于是就只能回归项目代码了,应该是代码里面写了什么或者用了什么神奇的东西。

找到了这个类,原来是 simple-jndi jar包, 项目里面用kettle来实现数据同步,方便调整数据库,便用到了这个jar包,采用jndi方式配置数据源。

新的曙光已经出现,怎么能够停滞不前!  这个问题来来回回折腾好几天了,是时候把它解决了!

又研究半天代码,发现网上在写kettle使用jndi方式里面,用的System的属性定义, 感觉就是这个鬼了。

System.setProperty("java.naming.factory.initial", "org.osjava.sj.SimpleContextFactory");

然后又去找了一下Java调用 WebLogic的JNDI,不同的容器使用的Context.INITIAL_CONTEXT_FACTORY是不一样的,Weblogic需要用到如下:

System.setProperty("java.naming.factory.initial",   "weblogic.jndi.WLInitialContextFactory");

这样,一切都明朗了!  我只需要配置weblogic的jndi,并且把simple-jndi的替换掉就OK了。

调整完毕,配置好JNDI,再部署应用,到此结束!

其实,只要认真仔细分析,问题都有解决的办法!  有相同或类似问题,欢迎留言探讨~

原文地址:https://www.cnblogs.com/cooldamon/p/10515099.html

时间: 2024-11-08 06:10:22

记一次Weblogic发布Springboot遇到的坑的相关文章

Myeclipse编译工程用Weblogic发布的时候jdk版本问题

最近在用Myeclipse编译的代码在Weblogic上发布的时候总是出错,调查发现原来的jdk版本的问题. 我的情况是这样的: 开发的时候我是用tomcat来发布测试的,没有任何问题,但是实际发布的时候用Weblogic,总是出错,所以就自然而然的想到的jdk版本的问题. 我用的Weblogic中用到的jdk为:1.4(jdk141_05) 路劲为C:\bea\jdk141_05 但是在Myeclipse中用来编码代码的jdk版本为:1.6(1.6.0-13). 发现这个问题之后,果断在Mye

weblogic发布应用包,路径乱码错误&linux修改LANG环境变量(解决中文乱码问题)

今天在weblogic发布应用包时,包内含有中文的路径或者文件名,发布时报错提示乱码,挂不上包! 通过命令 echo $LANG 发现输出 zh_CN.UTF-8 我们需要修改LANG的环境变量才可以解决这个问题! a.若要临时解决,可变更当前环境变量,执行  export LANG=zh_CN.GB18030,但本次打开的终端关闭后环境变量就会变回系统默认 b.若有永久改变,需要修改 vi /etc/sysconfig/i18n中,将LANG变更为需求的值并保存,如zh_CN.GB18030

Weblogic发布小问题——The root element weblogic-web-app is missing in the descriptor file

前几天发布项目遇到这样一个小错误,在此记录一下,以便加深一点印象,下次好解决类似的问题! (对应的应用服务器是WebLogic Server 版本: 10.3.6.0,应用是以文件夹的形式发在服务器的对应目录下的) 1:错误的信息如下图所示 2:分析及解决这个小问题的过程 错误的提示信息还是比较清楚的指出了错误发生的位置和原因的,根据提示信息找到对应的目录查看对应的文件,发现对应的目录下的weblogic.xml文件的内容如下所示 <container-descriptor> <pref

Weblogic发布小问题——weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND

前几天发布应用时出现了如下所示的一段错误提示信息: weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/java

weblogic发布项目使用myeclipse正常启动,点击startWeblogic.cmd报错的解决办法

今天在做项目的时候碰到一个问题,用weblogic发布的项目,使用myeclipse能正常启动,但点击startWeblogic.cmd就会报错,提示我的一个class not found.刚开始不清楚是什么问题,后来想了想,应该是jdk版本不一致的问题.后来试了一下,还真是的.我项目中使用的jdk是本机安装的1.7的版本,而使用的weblogic10自带的jdk是1.5的版本.这样的话,使用startWeblogic.cmd启动时,默认加载的就是weblogic自带的jdk.有两种解决办法,一

2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module)

https://segmentfault.com/a/1190000011367492?utm_source=tag-newest 2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module) 原文地址:https://www.cnblogs.com/javajetty/p/9955082.html

MyEclipse发布Springboot项目到MyEclipse配置的Tomcat中

MyEclipse发布Springboot项目到MyEclipse配置的Tomcat中步骤一: 右键点击项目名,选择Build Path --> Configure Bulid Path... 步骤二: 找到MyEclipse -- > Deployment Assembly,点击Add... 步骤三: 选中 Java Build Path Entries,点击 Next > 步骤四: 选中 Maven Dependencies,点击 Finish 步骤五: 可以看到maven的包已经被

记一次Nancy 框架中遇到的坑

记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上.搞了两天,终于解决了.于是把它记录下来,以避免其他人也碰到这种情况. 起因 公司一个Nancy 框架 开发的web网站,以前一直都是好的,nancy 框架也用在了很多项目里面,基本上已经很成熟很稳定了,但是在前几天发布某个web网站的时候,竟然出现部分用户登录不上的情况.刚开始以为是人员的权限有问

【转】weblogic 发布CXF问题

之前在项目中遇见一个问题就是发布CXF到weblogic中遇见一个问题 java.lang.LinkageError: loader constraints violated when linking org/w3c/dom/UserDataHandler class at org.apache.cxf.staxutils.StaxUtils.addLocation(StaxUtils.java:984) at org.apache.cxf.staxutils.StaxUtils.startEl