直接说吧,背景是这样的,因为业务需求,需要在web.xml里增加一个listener配置,即:
<listener>
<listener-class>com.publicity.util.TimerListener</listener-class>
</listener>
但是修改完配置文件重启应用后发现根本没有加载配置的这个类,一顿猛如虎的操作之后依旧不行,一怒之下。。。。。。我百度了,找到了一位神仙分享的经验,附上链接:大神之贴
了解到websphere并不是直接使用web.xml的,而是运行在部署的时候根据web.xml生成的web_merged.xml(神奇不)
也就是说光修改web.xml是不够的,还要修改web_merged.xml,至此就通透了许多了。
根据大神的指示使用了第二种方法来修改配置,原文:
使用WAS的web控制台进行更新web.xml文件(登陆控制台,选择程序后点击“更新”,选择“替换或添加单个文件 ”)。
WAS会自动把更改同步到web_merged.xml以及缓存目录下。(相当于WAS帮你进行了方法一的操作)
使用这个方法,你甚至都不需要重启WAS,也不需要重启应用。
然后。。。应用服务自己停了。。。还是得重启,不过无伤大雅,重启以后果然是一条好汉,配置的listener类果然被加载了。
但是(万恶的但是…),被调用的方法里,获取WebApplicationContext对象为空,以致后续代码报null exception,如图:
No Spring WebApplicationInitializer types detected on classpath(还是把报错信息粘出来吧,以免百度的时候找不到)
看的我也是一脸蒙圈,以为是spring的相关配置没有配置全,但是。。。都配置了,包括网上说的东西也都配置了,可他就是不好使,在网上搜了一天也是没啥结果,快下班了,我又想起大神说的web_merged.xml了,一看,果然看出端倪了,生成的配置内容中,listener的顺序跟原来的不一样了,把新加的listener配置放到了这个配置前了
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
果断将新加的配置挪到了这个后面,再打到服务器上,重启was和应用,搞定!
现在还有多少单位在使用websphere我不知道,只希望我记录的这个坑能够对还在使用的童鞋们有所帮助