记一次Weblogic发布Springboot遇到的坑

cooldamon 2019-03-12 原文

记一次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,再部署应用,到此结束! 

 

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

posted on 2019-03-12 11:34 cooldamon 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为cooldamon原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cooldamon/p/10515099.html

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

随机推荐

  1. iOS-UITableView和UICollectionView实现多类型可刷新列表

    列表是最常用的UI组件,iOS中列表分为UITableView和UICollectionView。UITableView是普通的纵向滑动列表,UICollectionView相当于前者的升级版,可以实现横向滑动等复杂的布局,定义列表ite...

  2. DataStructure之线性表以及其实现

    线性表 应用:多项式的表示   什么是线性表 多项式表示问题给出的启示:   同一个问题可以有不同的表示(存储 […]...

  3. js保留两位小数方法总结

    js保留两位小数方法总结   最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular […]...

  4. idea配置代码注释模板

    从eclipse换成idea后,有点不习惯,其中之一就是代码注释,感觉不如eclipse好用,下面是一些配置方 […]...

  5. LINUX 常用替换命令三种方法(perl、shell、sed)

    1、perl:find/ls -name \’要查找的文件名\’ | xargs pe […]...

  6. 如何用Rational rose创建类图

    UML中各种图形概要: 图名 对照 说明 用例图 use case diagram 用例图表明系统做什么,与谁 […]...

  7. 通过几个Hello World感受.NET Core全新的开发体验

    2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布。我 […]...

  8. 高并发场景下nodePort服务造成的服务降级

    有一天,接到用户电话,请求帮忙排除一个问题。   用户的服务是部署在k8s集群上的,通过nodePort向集群 […]...

展开目录

目录导航